openapi: 3.0.0 info: description: Polar AccessLink API documentation version: v3 title: Polar AccessLink API contact: name: Support url: 'https://www.polar.com/accesslink' email: b2bhelpdesk@polar.com license: name: Polar Electro AccessLink Limited License Agreement url: 'https://www.polar.com/en/legal/polar-api-agreement' tags: - name: Users description: This resource provides all the necessary functions to manage users. - name: Physical info description: >- This resource allows partners to access their users' physical information. - name: Pull notifications description: >- This resource allows partners to check if their users have available data for downloading. Use client credentials authentication. Returns object holding list of available data objects. - name: Exercises description: >- Resources for getting information about exercise. These endpoints do not require an active transaction, but they use hashed id. - name: Daily activity description: >- This resource allows partners to access their users' daily activity data. Webhooks are used to notify partners when new data is available. - name: Continuous Heart Rate description: >- This resource allows partners to access their users' continuous heart rate data. Continuous heart rate is recorded with supported devices when the heart rate tracking is turned on in device settings. Samples are recording in 5 minute intervals. Heart rate samples from training sessions are not available through this resource. Training sessions samples have more precise sampling interval and they can be accessed from the [training data resource](#exercises). Supported devices - name: Cardio load description: >- Cardio load is based on training impulse calculation (TRIMP), a commonly accepted and scientifically proven method to quantify training load. Your Cardio load value tells you how much strain your training session put on your cardiovascular system. The higher the Cardio load, the more strenuous the training session was for the cardiovascular system. Cardio load is calculated after every workout from your heart rate data and session duration. For more detailed information please check [cardio load](https://support.polar.com/e_manuals/unite/polar-unite-user-manual-english/cardio-load.htm). - name: SleepWise™ description: >- This resource allows partners to access their users' SleepWise™ data. All time values are UTC times. SleepWise™ data is calculated for [SleepWise™](https://support.polar.com/en/polar-sleepwise) supported devices when minimum of 5 days of sleep data is available. SleepWise™ data consists of alertness periods and circadian bedtime periods. - name: Elixir™ Biosensing description: >- This resource allows partners to access their users' Elixir™ Biosensing data. All time values are UTC times. Elixir™ Biosensing data consists of body temperature data, sleep skin temperature data, skin contacts data, wrist ECG test report data and SpO2 test report data. - name: Webhooks description: Webhook resources provides endpoints for creating, modifying and deleting webhooks. - name: Sleep description: >- Sleep endpoints support [Polar Sleep Plus™](https://www.polar.com/en/smart-coaching/polar-sleep-plus) and [Sleep Plus Stages™](https://www.polar.com/en/smart-coaching/sleep-plus-stages). Available data is presented in section [Schemas](#schemas). - name: Nightly Recharge description: >- Nightly Recharge™ is a recovery measurement that shows how well your body recovers from daily training and stress. It is based on heart rate variability (HRV) and overnight heart rate data. The higher the Nightly Recharge score, the better your body has recovered. For more detailed information please check [Nightly Recharge](https://support.polar.com/e_manuals/unite/polar-unite-user-manual-english/nightly-recharge.htm). - name: Physical info (deprecated) description: >- This resource allows partners to access their users' physical information. Whenever some user's physical information changes, new entry containing full physical info is stored to AccessLink. Pull notifications can be used to check if user have new physical information available. Available data presented in section [Schemas](#schemas).

This resource is deprecated. Please use non-transactional [Physical info](#physical-info) instead. - name: Daily activity (deprecated) description: >- This resource allows partners to access their users' daily activity data. During the transfer, the activity data is copied also into the AccessLink database so the end-users cannot change the data that is accessible via AccessLink afterwards. Begin and end of day are determined by the time set on the device used. No timezone information is available. Each transaction will consist of at most 50 activity summaries. Available data presented in section [Schemas](#schemas). Only data that has been uploaded to Flow after the user has been registered to your client will be available. Only data that has been uploaded in the last 28 days will be available.

This resource is deprecated. Please use non-transactional [Daily activity](#daily-activity) instead. - name: Exercises (deprecated) description: >- This resource allows partners to access their users' training data. All time values are UTC except start-time. Start-time is the time set on the training computer. Each transaction will consist of at most 50 training sessions. Available data presented in section [Schemas](#schemas). Only data that has been uploaded to Flow after the user has been registered to your client will be available. Only data that has been uploaded in the last 28 days will be available.

This resource is deprecated. Please use non-transactional [Exercises](#exercises) instead. paths: /v3/exercises: get: tags: - Exercises summary: List exercises description: >- List users exercises available in AccessLink. Only Exercises uploaded to Flow in the last 30 days are returned. Only exercises that have been uploaded to Flow after the user is registered with your client will be returned. Use samples and zones query parameters to return optional samples and zone information of the exercises. Training Load Pro data will be included in the exercise object if the exercise is recorded with a specific wrist unit model, please check [compatible devices](https://www.polar.com/en/smart-coaching/training-load-pro) for more information. operationId: listExercisesWithoutTransaction parameters: - name: samples in: query description: Return all sample data for this exercise. required: false schema: type: boolean - name: zones in: query description: Return all zones data for this exercise. required: false schema: type: boolean - name: route in: query description: Return all route data for this exercise. required: false schema: type: boolean responses: '200': description: List of users exercises. content: application/json: schema: $ref: '#/components/schemas/exercisesHashId' '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all /v3/exercises/{exerciseId}: get: tags: - Exercises summary: Get exercise description: >- Get users exercise using hashed id. Only Exercises uploaded to Flow in the last 30 days are available. Only exercises that have been uploaded to Flow after the user is registered with your client will be available. Use samples and zones query parameters to return optional samples and zone information of the exercise. operationId: getExerciseWithoutTransaction parameters: - name: exerciseId in: path description: Hashed exercise id. required: true schema: type: string - name: samples in: query description: Return all sample data for this exercise. required: false schema: type: boolean - name: zones in: query description: Return all zones data for this exercise. required: false schema: type: boolean - name: route in: query description: Return all route data for this exercise. required: false schema: type: boolean responses: '200': description: Exercise information. content: application/json: schema: $ref: '#/components/schemas/exerciseHashId' '404': description: Exercise not found. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all /v3/exercises/{exerciseId}/fit: get: tags: - Exercises summary: Get exercise FIT description: >- FIT file for users exercise. Only Exercises uploaded to Flow in the last 30 days are available. Only exercises that have been uploaded to Flow after the user is registered with your client will be available. See [FIT sport mappings in appendix](#sport-type-mapping-in-fit-files). parameters: - name: exerciseId in: path description: Hashed exercise id. required: true schema: type: string operationId: getExerciseFitWithoutTransaction responses: '200': description: Return FIT file. content: '*/*': schema: type: string format: binary '404': description: Exercise not found. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all /v3/exercises/{exerciseId}/tcx: get: tags: - Exercises summary: Get exercise TCX description: >- TCX file for users exercise without an AccessLink "transaction". Only Exercises uploaded to Flow in the last 30 days are available. Only exercises that have been uploaded to Flow after the user is registered with your client will be available. parameters: - name: exerciseId in: path description: Hashed exercise id. required: true schema: type: string operationId: getExerciseTcxWithoutTransaction responses: '200': description: Return gzipped TCX. content: application/vnd.garmin.tcx+xml: schema: type: string format: binary '404': description: Exercise not found. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all /v3/exercises/{exerciseId}/gpx: get: tags: - Exercises summary: Get exercise GPX description: >- GPX file for users exercise without an AccessLink "transaction". Only Exercises uploaded to Flow in the last 30 days are available. Only exercises that have been uploaded to Flow after the user is registered with your client will be available. parameters: - name: exerciseId in: path description: Hashed exercise id. required: true schema: type: string operationId: getExerciseGpxWithoutTransaction responses: '200': description: Return exercise in GPX (GPS Exchange format). content: application/gpx+xml: schema: type: string format: binary '404': description: Exercise not found. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all /v3/users: post: tags: - Users summary: Register user description: >- Once partner has been authorized by user, partner must register the user before being able to access its data. API user-id and Polar User Id (polar-user-id) are interchangeable terms. operationId: registerUser responses: '200': description: User's base information. content: application/json: schema: $ref: '#/components/schemas/user' application/xml: schema: $ref: '#/components/schemas/user' '204': description: No content when user with given userId is not found. '409': description: User already registered to partner or duplicated member-id. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all requestBody: content: application/xml: schema: $ref: '#/components/schemas/register' application/json: schema: $ref: '#/components/schemas/register' required: true '/v3/users/{user-id}': get: tags: - Users summary: Get user information description: >- List user basic information. Note: Although it is possible to get users weight and height from this resource, the [get physical info](#get-physical-info) should be used instead. operationId: getUserInformation parameters: - name: user-id in: path description: User identifier required: true example: 475 schema: type: integer format: int64 pattern: '[0-9]+' responses: '200': description: User's base information. content: application/json: schema: $ref: '#/components/schemas/user' application/xml: schema: $ref: '#/components/schemas/user' '204': description: No content when user with given userId is not found. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all delete: tags: - Users summary: Delete user description: >- When partner wishes no longer to receive user data, user can be de-registered. This will revoke the access token authorized by user. operationId: deleteUser parameters: - name: user-id in: path description: User identifier required: true schema: type: integer format: int64 pattern: '[0-9]+' responses: '204': description: will be returned when user is successfully de-registered. security: - OAuth2: - accesslink.read_all /v3/users/physical-info: get: tags: - Physical info summary: Get user's physical info description: >- Retrieve user's physical information. operationId: getUserPhysicalInformation responses: '200': description: User's physical information. content: application/json: schema: $ref: '#/components/schemas/physical-info' application/xml: schema: $ref: '#/components/schemas/physical-info' '401': description: Unauthorized. '403': description: User has not accepted all mandatory consents. '404': description: User not found. security: - OAuth2: - accesslink.read_all /v3/notifications: get: tags: - Pull notifications summary: List description: Get list of available exercises and activities for users operationId: list responses: '200': description: List of available data content: application/json: schema: $ref: '#/components/schemas/available-user-datas' application/xml: schema: $ref: '#/components/schemas/available-user-datas' '204': description: No content when no available data found security: - Basic: [ ] '/v3/users/{user-id}/exercise-transactions': post: tags: - Exercises (deprecated) summary: Create transaction description: >- Check for new training data and create a new transaction if found. Only data uploaded to Flow in the last 30 days will be available. Only data that has been uploaded to Flow after the user is registered with your client will be available. operationId: createExerciseTransaction parameters: - name: user-id in: path description: User identifier required: true schema: type: integer pattern: '[0-9]+' responses: '201': description: >- Return link to created transaction containing new training session data. content: application/json: schema: $ref: '#/components/schemas/transaction-location' application/xml: schema: $ref: '#/components/schemas/transaction-location' '204': description: No content when there is no new training session data available. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/{user-id}/exercise-transactions/{transaction-id}': get: tags: - Exercises (deprecated) summary: List exercises description: >- After successfully initiating a transaction, training sessions included within it can be retrieved with the provided transactionId. operationId: listExercises parameters: - name: transaction-id in: path description: Transaction identifier required: true schema: type: integer format: int64 pattern: '[0-9]+' - name: user-id in: path description: User identifier required: true schema: type: integer pattern: '[0-9]+' responses: '200': description: >- Return list of hyperlinks to training sessions contained within the transaction. content: application/json: schema: $ref: '#/components/schemas/exercises' application/xml: schema: $ref: '#/components/schemas/exercises' example: exercises: exercise: - https://www.polaraccesslink.com/v3/users/12/exercise-transactions/34/exercises/56 - https://www.polaraccesslink.com/v3/users/12/exercise-transactions/34/exercises/120 '204': description: No content when there is no data available. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all put: tags: - Exercises (deprecated) summary: Commit transaction description: >- After successfully retrieving training session data within a transaction, partners are expected to commit the transaction. operationId: commitExerciseTransaction parameters: - name: transaction-id in: path description: Transaction identifier required: true schema: type: integer format: int64 pattern: '[0-9]+' - name: user-id in: path description: User identifier required: true schema: type: integer pattern: '[0-9]+' responses: '200': description: Transaction has been committed and data deleted. '204': description: No content when there is no data available. '404': description: No transaction was found with given transaction id. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/{user-id}/exercise-transactions/{transaction-id}/exercises/{exercise-id}': get: tags: - Exercises (deprecated) summary: Get exercise summary description: Retrieve training session summary data operationId: getExerciseSummary parameters: - name: user-id in: path description: User identifier required: true schema: type: integer - name: transaction-id in: path description: Transaction identifier required: true schema: type: integer - name: exercise-id in: path description: Exercise identifier required: true schema: type: integer responses: '200': description: Exercise summary. content: application/json: schema: $ref: '#/components/schemas/exercise' application/xml: schema: $ref: '#/components/schemas/exercise' '204': description: No content when there is no data available. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/{user-id}/exercise-transactions/{transaction-id}/exercises/{exercise-id}/fit': get: tags: - Exercises (deprecated) summary: Get FIT description: >- Retrieve exercise in FIT format. See [FIT sport mappings in appendix](#sport-type-mapping-in-fit-files). operationId: getFit parameters: - name: user-id in: path description: User identifier required: true schema: type: integer - name: transaction-id in: path description: Transaction identifier required: true schema: type: integer - name: exercise-id in: path description: Exercise identifier required: true schema: type: integer responses: '200': description: Return FIT file. content: '*/*': schema: type: string '204': description: No FIT available for exercise. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/{user-id}/exercise-transactions/{transaction-id}/exercises/{exercise-id}/gpx': get: tags: - Exercises (deprecated) summary: Get GPX description: Retrieve training session summary data in GPX format operationId: getGpx parameters: - name: user-id in: path description: User identifier required: true schema: type: integer - name: transaction-id in: path description: Transaction identifier required: true schema: type: integer - name: exercise-id in: path description: Exercise identifier required: true schema: type: integer - name: includePauseTimes in: query description: Whether to add pauses as part of the route. Default is false. required: false schema: type: boolean default: false responses: '200': description: Return training session in GPX (GPS Exchange format). content: application/gpx+xml: schema: type: string '204': description: No content when there is no data available. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/{user-id}/exercise-transactions/{transaction-id}/exercises/{exercise-id}/heart-rate-zones': get: tags: - Exercises (deprecated) summary: Get heart rate zones description: Retrieve heart rate zones in training session operationId: getHeartRateZones parameters: - name: user-id in: path description: User identifier required: true schema: type: integer - name: transaction-id in: path description: Transaction identifier required: true schema: type: integer - name: exercise-id in: path description: Exercise identifier required: true schema: type: integer responses: '200': description: Return heart rate zones in training session. content: application/json: schema: $ref: '#/components/schemas/zones' application/xml: schema: $ref: '#/components/schemas/zones' '204': description: No content when there is no data available. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/{user-id}/exercise-transactions/{transaction-id}/exercises/{exercise-id}/samples': get: tags: - Exercises (deprecated) summary: Get available samples description: Retrieve list of links to available samples in training session operationId: getAvailableSamples parameters: - name: user-id in: path description: User identifier required: true schema: type: integer - name: transaction-id in: path description: Transaction identifier required: true schema: type: integer - name: exercise-id in: path description: Exercise identifier required: true schema: type: integer responses: '200': description: Return list of hyperlinks to available samples in training session. content: application/json: schema: $ref: '#/components/schemas/samples' application/xml: schema: $ref: '#/components/schemas/samples' '204': description: No content when there is no data available. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/{user-id}/exercise-transactions/{transaction-id}/exercises/{exercise-id}/samples/{type-id}': get: tags: - Exercises (deprecated) summary: Get samples description: Retrieve sample data of given type operationId: getSamples parameters: - name: type-id in: path description: Sample type id required: true schema: type: string format: byte pattern: '[0-9]+' - name: user-id in: path description: User identifier required: true schema: type: integer - name: transaction-id in: path description: Transaction identifier required: true schema: type: integer - name: exercise-id in: path description: Exercise identifier required: true schema: type: integer responses: '200': description: Return sample data. content: application/json: schema: $ref: '#/components/schemas/sample' application/xml: schema: $ref: '#/components/schemas/sample' '204': description: No content when there is no data available. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/{user-id}/exercise-transactions/{transaction-id}/exercises/{exercise-id}/tcx': get: tags: - Exercises (deprecated) summary: Get TCX description: Retrieve exercise in TCX format operationId: getTcx parameters: - name: user-id in: path description: User identifier required: true schema: type: integer - name: transaction-id in: path description: Transaction identifier required: true schema: type: integer - name: exercise-id in: path description: Exercise identifier required: true schema: type: integer responses: '200': description: Return gzipped TCX. content: application/vnd.garmin.tcx+xml: schema: type: string '204': description: No TCX available for exercise. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/{user-id}/activity-transactions': post: tags: - Daily activity (deprecated) summary: Create transaction description: |- Initiate activity transaction. Check for new activity summaries and create a new transaction if found. Only data uploaded to Flow in the last 30 days will be available. Only data that has been uploaded to Flow after the user is registered with your client will be available. operationId: createActivityTransaction parameters: - name: user-id in: path description: User identifier required: true schema: type: integer pattern: '[0-9]+' responses: '201': description: Return link to created transaction containing new activity data. content: application/json: schema: $ref: '#/components/schemas/transaction-location' application/xml: schema: $ref: '#/components/schemas/transaction-location' '204': description: No content when there is no new activity data available. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/{user-id}/activity-transactions/{transaction-id}': get: tags: - Daily activity (deprecated) summary: List activities description: >- List new activity data. After successfully initiating a transaction, activity summaries included within it can be retrieved with the provided transactionId. operationId: listActivities parameters: - name: transaction-id in: path description: Transaction identifier required: true schema: type: integer format: int64 pattern: '[0-9]+' - name: user-id in: path description: User identifier required: true schema: type: integer pattern: '[0-9]+' responses: '200': description: >- Return list of hyperlinks to activity summaries contained within the transaction. content: application/json: schema: $ref: '#/components/schemas/activity-log' application/xml: schema: $ref: '#/components/schemas/activity-log' '204': description: No content when there is no data available. '404': description: No transaction was found with given transaction id. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all put: tags: - Daily activity (deprecated) summary: Commit transaction description: >- After successfully retrieving activity summary data within a transaction, partners are expected to commit the transaction. operationId: commitActivityTransaction parameters: - name: transaction-id in: path description: Transaction identifier required: true schema: type: integer format: int64 pattern: '[0-9]+' - name: user-id in: path description: User identifier required: true schema: type: integer pattern: '[0-9]+' responses: '200': description: Transaction has been committed and data deleted. '204': description: No content when there is no data available. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/{user-id}/activity-transactions/{transaction-id}/activities/{activity-id}': get: tags: - Daily activity (deprecated) summary: Get activity summary description: '' operationId: getActivitySummary parameters: - name: user-id in: path description: User identifier required: true schema: type: integer - name: transaction-id in: path description: Transaction identifier required: true schema: type: integer - name: activity-id in: path description: Activity summary identifier required: true schema: type: integer responses: '200': description: Return activity summary contained within the transaction. content: application/json: schema: $ref: '#/components/schemas/activity' application/xml: schema: $ref: '#/components/schemas/activity' '204': description: No content when there is no data available. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/{user-id}/activity-transactions/{transaction-id}/activities/{activity-id}/step-samples': get: tags: - Daily activity (deprecated) summary: Get step samples description: >- Get activity step samples. Example data can be seen from [appendix](#activity-step-time-series). operationId: getStepSamples parameters: - name: user-id in: path description: User identifier required: true schema: type: integer - name: transaction-id in: path description: Transaction identifier required: true schema: type: integer - name: activity-id in: path description: Activity summary identifier required: true schema: type: integer responses: '200': description: Return activity step samples. content: application/json: schema: $ref: '#/components/schemas/activity-step-samples' application/xml: schema: $ref: '#/components/schemas/activity-step-samples' '204': description: No content when there is no data available. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/{user-id}/activity-transactions/{transaction-id}/activities/{activity-id}/zone-samples': get: tags: - Daily activity (deprecated) summary: Get zone samples description: >- Get activity zone samples. Example data can be seen from [appendix](#activity-zone-time-series). operationId: getZoneSamples parameters: - name: user-id in: path description: User identifier required: true schema: type: integer - name: transaction-id in: path description: Transaction identifier required: true schema: type: integer - name: activity-id in: path description: Activity summary identifier required: true schema: type: integer responses: '200': description: Return activity zone samples. content: application/json: schema: $ref: '#/components/schemas/activity-zone-samples' application/xml: schema: $ref: '#/components/schemas/activity-zone-samples' '204': description: No content when there is no data available. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/activities': get: tags: - Daily activity summary: List activities description: >- List users activities available in AccessLink. When no date range is given, activities from the last 28 days are returned. When `from` is given, activities for the specified date range are returned. From date cannot be older than 365 days from today and the maximum range between from and to is 28 days. operationId: listActivitiesWithoutTransaction parameters: - name: from in: query description: Start date in format YYYY-MM-DD. If not given, defaults to 28 days ago. required: false schema: type: string format: date example: '2023-01-01' - name: to in: query description: End date in format YYYY-MM-DD. If not given, defaults to today. required: false schema: type: string format: date example: '2023-01-28' - name: steps in: query description: include steps samples for activity summary. required: false schema: type: boolean - name: activity_zones in: query description: include activity zones samples for activity summary. required: false schema: type: boolean - name: inactivity_stamps in: query description: include inactivity stamps for activity summary. required: false schema: type: boolean responses: '200': description: List of extended daily activities with all samples. content: application/json: schema: $ref: '#/components/schemas/array-of-activity-summary-with-all-samples' '400': description: Invalid or too old date. Cannot be older than 365 days. '401': description: Unauthorized. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/activities/{date}': get: tags: - Daily activity summary: Get activity for given date description: >- Get users activity for given date. Date cannot be older than 365 days from today. operationId: getActivityWithoutTransaction parameters: - name: date in: path description: Date in format YYYY-MM-DD. required: true schema: type: string format: date - name: steps in: query schema: type: boolean description: include steps samples for activity summary. - name: activity_zones in: query schema: type: boolean description: include activity zones samples for activity summary. - name: inactivity_stamps in: query schema: type: boolean description: include inactivity stamps for activity summary. responses: '200': description: Extended activity summaries with all samples. content: application/json: schema: $ref: '#/components/schemas/activity-summary-with-all-samples' '204': description: No content when no activity found for given date. '403': description: User has not accepted all mandatory consents. '401': description: Unauthorized. '400': description: Invalid or too old date. Cannot be older than 365 days. security: - OAuth2: - accesslink.read_all '/v3/users/activities/samples': get: tags: - Daily activity summary: List activity samples description: >- List users activity samples available in AccessLink. When no date range is given, activity samples from the last 28 days are returned. When `from` is given, activity samples for the specified date range are returned. From date cannot be older than 365 days from today and the maximum range between from and to is 28 days. operationId: listActivitySamplesWithoutTransaction parameters: - name: from in: query description: Start date in format YYYY-MM-DD. If not given, defaults to 28 days ago. required: false schema: type: string format: date example: '2023-01-01' - name: to in: query description: End date in format YYYY-MM-DD. If not given, defaults to today. required: false schema: type: string format: date example: '2023-01-31' responses: '200': description: List of users activity samples. content: application/json: schema: $ref: '#/components/schemas/array-of-activity-day-with-samples' '400': description: Invalid or too old date. Cannot be older than 365 days. '401': description: Unauthorized. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/activities/samples/{date}': get: tags: - Daily activity summary: Get activity samples for given date description: >- Get users activity samples for given date. Date cannot be older than 365 days from today. operationId: getActivitySamplesWithoutTransaction parameters: - name: date in: path description: Date in format YYYY-MM-DD. required: true schema: type: string format: date responses: '200': description: Activity samples for given date. content: application/json: schema: $ref: '#/components/schemas/activity-day-with-samples' '204': description: No content when no activity samples found for given date. '403': description: User has not accepted all mandatory consents. '401': description: Unauthorized. '400': description: Invalid or too old date. Cannot be older than 365 days. security: - OAuth2: - accesslink.read_all '/v3/users/{user-id}/physical-information-transactions': post: tags: - Physical info (deprecated) summary: Create transaction description: |- Initiate physical info transaction. Check for new physical info and create a new transaction if found. operationId: createPhysicalInfoTransaction parameters: - name: user-id in: path description: User identifier required: true schema: type: integer responses: '201': description: Return link to created transaction containing new physical info data. content: application/json: schema: $ref: '#/components/schemas/transaction-location' application/xml: schema: $ref: '#/components/schemas/transaction-location' '204': description: No content when there is no new physical info data available. '403': description: User has not accepted all mandatory consents. '401': description: Unauthorized. security: - OAuth2: - accesslink.read_all '/v3/users/{user-id}/physical-information-transactions/{transaction-id}': get: tags: - Physical info (deprecated) summary: List physical infos description: >- List new physical info data. After successfully initiating a transaction, physical infos included within it can be retrieved with the provided transactionId. operationId: listPhysicalInfos parameters: - name: transaction-id in: path description: Transaction identifier required: true schema: type: integer format: int64 - name: user-id in: path description: User identifier required: true schema: type: integer responses: '200': description: >- Return list of hyperlinks to physical information contained within the transaction. content: application/json: schema: $ref: '#/components/schemas/physical-informations' application/xml: schema: $ref: '#/components/schemas/physical-informations' example: physical-informations: physical-information: - https://www.polaraccesslink.com/v3/users/12/physical-information-transactions/12/physical-informations/56 - https://www.polaraccesslink.com/v3/users/12/physical-information-transactions/12/physical-informations/120 '204': description: No content when there is no data available. '404': description: No transaction was found with given transaction id. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all put: tags: - Physical info (deprecated) summary: Commit transaction description: >- After successfully retrieving physical information within a transaction, partners are expected to commit the transaction. operationId: commitPhysicalInfoTransaction parameters: - name: transaction-id in: path description: Transaction identifier required: true schema: type: integer format: int64 - name: user-id in: path description: User identifier required: true schema: type: integer responses: '200': description: Transaction has been committed and data deleted. '204': description: No content when there is no data available. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/{user-id}/physical-information-transactions/{transaction-id}/physical-informations/{physical-info-id}': get: tags: - Physical info (deprecated) summary: Get physical info description: Get physical info entity data operationId: getPhysicalInfo parameters: - name: user-id in: path description: User identifier required: true schema: type: integer - name: transaction-id in: path description: Transaction identifier required: true schema: type: integer - name: physical-info-id in: path description: Physical information identifier required: true schema: type: integer responses: '200': description: Physical information. content: application/json: schema: $ref: '#/components/schemas/physical-information' application/xml: schema: $ref: '#/components/schemas/physical-information' '204': description: No content when there is no data available. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/webhooks': post: tags: - Webhooks summary: Create webhook description: >- Create new webhook. When creating webhook the AccessLink sends a ping message to the url in request body. The ping message must be answered with 200 OK or otherwise the webhook is not created. Created webhook is by default in activated state and will send push notifications about subscribed events. Webhook will be automatically deactivated if push notifications have not been successful for a period of seven (7) days. **Note!** Save the *signature_secret_key* from response since this is the only chance to get it. operationId: createWebhook responses: '201': description: Created webhook. content: application/json: schema: $ref: '#/components/schemas/createdWebhook' '400': description: Webhook cannot be created. content: application/json: schema: $ref: '#/components/schemas/error' '409': description: Webhook already exists. content: application/json: schema: $ref: '#/components/schemas/error' security: - Basic: [ ] requestBody: description: Webhook to create. content: application/json: schema: $ref: '#/components/schemas/webhookRequest' required: true get: tags: - Webhooks summary: Get webhook description: >- Returns created webhook if exists. operationId: getWebhook responses: '200': description: Existing webhook. content: application/json: schema: $ref: '#/components/schemas/webhookInfo' security: - Basic: [ ] '/v3/webhooks/activate': post: tags: - Webhooks summary: Activate webhook description: >- Activate deactivated webhook. Activation is successful if the configured webhook url returns HTTP status 200 (OK) for the issued ping request. responses: '200': description: Webhook has been successfully activated. '204': description: Webhook does not exist and it cannot be activated. security: - Basic: [ ] '/v3/webhooks/deactivate': post: tags: - Webhooks summary: Deactivate webhook description: >- Deactivate activated webhook. Deactivated webhook does not push notifications about subscribed events. responses: '200': description: Webhook has been successfully deactivated. '204': description: Webhook does not exist and it cannot be deactivated. security: - Basic: [ ] '/v3/webhooks/{webhook-id}': patch: tags: - Webhooks summary: Update webhook description: >- Edit webhook event types and/or url. When updating webhook url the AccessLink sends a ping message to the new address. The ping message must be answered with 200 OK or otherwise the webhook is not updated. operationId: updateWebhook parameters: - name: webhook-id in: path description: Webhook id to update required: true schema: type: string requestBody: description: New value(s) for events and/or url. content: application/json: schema: $ref: '#/components/schemas/webhookPatch' required: true responses: '200': description: Webhook updated successfully. content: application/json: schema: $ref: '#/components/schemas/webhookInfo' '400': description: Webhook cannot be updated. content: application/json: schema: $ref: '#/components/schemas/error' '404': description: Webhook not found. content: application/json: schema: $ref: '#/components/schemas/error' security: - Basic: [ ] delete: tags: - Webhooks summary: Delete webhook description: >- Delete webhook by id. operationId: deleteWebhook parameters: - name: webhook-id in: path description: Webhook id to delete required: true schema: type: string responses: '204': description: Webhook deleted successfully. '404': description: Webhook not found. content: application/json: schema: $ref: '#/components/schemas/error' security: - Basic: [ ] '/v3/users/sleep': get: tags: - Sleep summary: List nights operationId: listNights description: >- List sleep data of user for the last 28 days. responses: '200': description: Request was successful content: application/json: schema: $ref: '#/components/schemas/nights' '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/sleep/{date}': get: tags: - Sleep parameters: - name: date in: path description: 'Date of sleep as ISO-8601 date string, example: "2020-01-01"' required: true schema: type: string summary: Get Sleep description: >- Get Users sleep data for given date. responses: '200': description: Request was successful. content: application/json: schema: $ref: '#/components/schemas/sleep' '400': description: Invalid date. '404': description: No data found for date. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/sleep/available': get: tags: - Sleep summary: Get available sleep times description: >- Get the dates with sleep start and end times, where user has sleep data available in the last 28 days. responses: '200': description: Request was successful. content: application/json: schema: $ref: '#/components/schemas/available-sleeps' '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/nightly-recharge': get: tags: - Nightly Recharge summary: List Nightly Recharges operationId: listNightlyRecharge description: >- List Nightly Recharge data of user for the last 28 days. responses: '200': description: Request was successful. content: application/json: schema: $ref: '#/components/schemas/recharges' '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/nightly-recharge/{date}': get: tags: - Nightly Recharge parameters: - name: date in: path description: 'Date of Nightly Recharge as ISO-8601 date string, example: "2020-01-01"' required: true schema: type: string summary: Get Nightly Recharge description: >- Get Users Nightly Recharge data for given date. responses: '200': description: Request was successful. content: application/json: schema: $ref: '#/components/schemas/nightly-recharge' '400': description: Invalid date. '404': description: No data found for date. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/continuous-heart-rate/{date}': get: tags: - Continuous Heart Rate parameters: - name: date in: path description: 'Date of Continuous Heart Rate as ISO-8601 date string, example: "2022-01-01"' required: true schema: type: string format: date summary: Get Continuous Heart rate samples description: >- Get users continuous heart rate values for given date. Supported devices responses: '200': description: Request was successful. content: application/json: schema: $ref: '#/components/schemas/continuous-heartrate' '400': description: Invalid request. '401': description: Unauthorized. '404': description: No data found for date. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/continuous-heart-rate': get: tags: - Continuous Heart Rate parameters: - name: from in: query description: 'Inclusive start date of range as ISO-8601 date string, example: "2022-01-01"' required: true schema: type: string format: date - name: to in: query description: 'Inclusive end date of range as ISO-8601 date string, example: "2022-01-28"' required: true schema: type: string format: date summary: Get Continuous Heart rate samples with range description: >- Get users continuous heart rate values for given date range. Supported devices responses: '200': description: Request was successful. content: application/json: schema: $ref: '#/components/schemas/continuous-heartrate' '400': description: Invalid request. '401': description: Unauthorized. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/cardio-load': get: tags: - Cardio load summary: List cardio loads description: >- Returns cardio load data for the last 28 days. The response list contains cardio load objects for every day in the range, even if values cannot be calculated — in that case the cardio load status is represented as LOAD_STATUS_NOT_AVAILABLE. responses: '200': description: List of user cardio loads. content: application/json: schema: $ref: '#/components/schemas/cardio-load-schema' '401': description: Unauthorized. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/cardio-load/{date}': get: tags: - Cardio load summary: Get cardio load by date description: >- Returns cardio load data for selected date. parameters: - name: date in: path description: 'Date as ISO-8601 date string, example: "2022-01-01"' required: true schema: type: string format: date responses: '200': description: Request was successful. content: application/json: schema: $ref: '#/components/schemas/cardio-load-schema' '400': description: Invalid request. '401': description: Unauthorized. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/cardio-load/date': get: tags: - Cardio load summary: Get cardio load by date range description: >- Returns cardio load data for selected date range. The response list contains cardio load objects for every day between range even if the cardio load values cannot be calculated, in this case the cardio load status is represented as LOAD_STATUS_NOT_AVAILABLE. parameters: - name: from in: query description: 'Inclusive as ISO-8601 date string, example: "2022-01-01"' required: true schema: type: string format: date - name: to in: query description: 'Inclusive as ISO-8601 date string, example: "2022-01-01"' required: true schema: type: string format: date responses: '200': description: Request was successful. content: application/json: schema: $ref: '#/components/schemas/cardio-load-schema' '400': description: Invalid request. '401': description: Unauthorized. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/cardio-load/period/days/{days}': get: tags: - Cardio load summary: Get historical data by days description: >- Returns historical cardio load data for selected period of days counting from current date. parameters: - name: days in: path description: 'Period of days.' required: true schema: type: integer minimum: 1 maximum: 180 responses: '200': description: Request was successful. content: application/json: schema: $ref: '#/components/schemas/cardio-load-schema' '400': description: Invalid request. '401': description: Unauthorized. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/cardio-load/period/months/{months}': get: tags: - Cardio load parameters: - name: months in: path description: 'Period of months.' required: true schema: type: integer minimum: 1 maximum: 6 summary: Get historical data by months description: >- Returns historical cardio load data for selected period of months counting from current date. responses: '200': description: Request was successful. content: application/json: schema: $ref: '#/components/schemas/cardio-load-schema' '400': description: Invalid request. '401': description: Unauthorized. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/sleepwise/alertness': get: tags: - SleepWise™ summary: Alertness period data (last 28 days) description: >- Get user's alertness period data for the last 28 days. Supported devices responses: '200': description: Request was successful. content: application/json: schema: type: array items: $ref: '#/components/schemas/alertness' '204': description: No data found for last 28 days. '400': description: Invalid request. '401': description: Unauthorized. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/sleepwise/alertness/date': get: tags: - SleepWise™ parameters: - name: from in: query description: 'Inclusive start date of range as ISO-8601 date string, example: "2022-01-01"' required: true schema: type: string format: date - name: to in: query description: 'Inclusive end date of range as ISO-8601 date string, example: "2022-01-28"' required: true schema: type: string format: date summary: Alertness period data (date range) description: >- Get user's alertness period data for given date range. Maximum date range between from and to cannot be more than 28 days. Supported devices responses: '200': description: Request was successful. content: application/json: schema: type: array items: $ref: '#/components/schemas/alertness' '204': description: No data found for date range. '400': description: Invalid request. '401': description: Unauthorized. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/sleepwise/circadian-bedtime': get: tags: - SleepWise™ summary: Circadian bedtime period data (last 28 days) description: >- Get user's circadian bedtime period data for the last 28 days. Supported devices responses: '200': description: Request was successful. content: application/json: schema: type: array items: $ref: '#/components/schemas/circadian-bedtime' '204': description: No data found for last 28 days. '400': description: Invalid request. '401': description: Unauthorized. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/sleepwise/circadian-bedtime/date': get: tags: - SleepWise™ parameters: - name: from in: query description: 'Inclusive start date of range as ISO-8601 date string, example: "2022-01-01"' required: true schema: type: string format: date - name: to in: query description: 'Inclusive end date of range as ISO-8601 date string, example: "2022-01-28"' required: true schema: type: string format: date summary: Circadian bedtime period data (date range) description: >- Get user's circadian bedtime period data for given date range. Maximum date range between from and to cannot be more than 28 days. Supported devices responses: '200': description: Request was successful. content: application/json: schema: type: array items: $ref: '#/components/schemas/circadian-bedtime' '204': description: No data found for date range. '400': description: Invalid request. '401': description: Unauthorized. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/biosensing/bodytemperature': get: tags: - Elixir™ Biosensing parameters: - name: from in: query description: 'Inclusive start date of range as ISO-8601 date string, example: "2023-10-01"' required: false schema: type: string format: date - name: to in: query description: 'Inclusive end date of range as ISO-8601 date string, example: "2023-10-28"' required: false schema: type: string format: date summary: Body temperature data description: >- Get user's body temperature data for last 28 days or for given date range. Maximum date range between from and to cannot be more than 28 days. responses: '200': description: Request was successful. content: application/json: schema: type: array items: $ref: '#/components/schemas/body-temperature-period' '400': description: Invalid request. '401': description: Unauthorized. '204': description: No data found. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/biosensing/skintemperature': get: tags: - Elixir™ Biosensing parameters: - name: from in: query description: 'Inclusive start date of range as ISO-8601 date string, example: "2023-10-01"' required: false schema: type: string format: date - name: to in: query description: 'Inclusive end date of range as ISO-8601 date string, example: "2023-10-28"' required: false schema: type: string format: date summary: Sleep skin temperature data description: >- Get user's sleep skin temperature data for last 28 days or for given date range. Maximum date range between from and to cannot be more than 28 days. responses: '200': description: Request was successful. content: application/json: schema: type: array items: $ref: '#/components/schemas/skin-temperature' '400': description: Invalid request. '401': description: Unauthorized. '204': description: No data found. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/biosensing/skincontacts': get: tags: - Elixir™ Biosensing parameters: - name: from in: query description: 'Inclusive start date of range as ISO-8601 date string, example: "2023-10-01"' required: false schema: type: string format: date - name: to in: query description: 'Inclusive end date of range as ISO-8601 date string, example: "2023-10-28"' required: false schema: type: string format: date summary: Skin contacts data description: >- Get user's skin contacts data for last 28 days or for given date range. Maximum date range between from and to cannot be more than 28 days. responses: '200': description: Request was successful. content: application/json: schema: type: array items: $ref: '#/components/schemas/skin-contact-period' '400': description: Invalid request. '401': description: Unauthorized. '204': description: No data found. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/biosensing/ecg': get: tags: - Elixir™ Biosensing parameters: - name: from in: query description: 'Inclusive start date of range as ISO-8601 date string, example: "2023-10-01"' required: false schema: type: string format: date - name: to in: query description: 'Inclusive end date of range as ISO-8601 date string, example: "2023-10-28"' required: false schema: type: string format: date summary: Wrist ECG test result data description: >- Get user's wrist ECG test result data for last 28 days or for given date range. Maximum date range between from and to cannot be more than 28 days. responses: '200': description: Request was successful. content: application/json: schema: type: array items: $ref: '#/components/schemas/ecg-test-result' '400': description: Invalid request. '401': description: Unauthorized. '204': description: No data found. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all '/v3/users/biosensing/spo2': get: tags: - Elixir™ Biosensing parameters: - name: from in: query description: 'Inclusive start date of range as ISO-8601 date string, example: "2023-10-01"' required: false schema: type: string format: date - name: to in: query description: 'Inclusive end date of range as ISO-8601 date string, example: "2023-10-28"' required: false schema: type: string format: date summary: SpO2 test result data description: >- Get user's SpO2 test result data for last 28 days or for given date range. Maximum date range between from and to cannot be more than 28 days. responses: '200': description: Request was successful. content: application/json: schema: type: array items: $ref: '#/components/schemas/spo2-test-result' '400': description: Invalid request. '401': description: Unauthorized. '204': description: No data found. '403': description: User has not accepted all mandatory consents. security: - OAuth2: - accesslink.read_all servers: - url: 'https://www.polaraccesslink.com/' components: securitySchemes: Basic: type: http scheme: basic OAuth2: type: oauth2 flows: authorizationCode: authorizationUrl: 'https://flow.polar.com/oauth2/authorization' tokenUrl: 'https://polarremote.com/v2/oauth2/token' scopes: accesslink.read_all: Allows read access to user's data schemas: training-load-pro-rpe-enum: description: Quantifies internal training load of a session. type: string enum: - UNKNOWN - RPE_NONE - RPE_EASY - RPE_LIGHT - RPE_FAIRLY_BRISK - RPE_BRISK - RPE_MODERATE - RPE_FAIRLY_HARD - RPE_HARD - RPE_EXHAUSTING - RPE_EXTREME training-load-pro-load-enum: type: string enum: - UNKNOWN - VERY_LOW - LOW - MEDIUM - HIGH - VERY_HIGH - NOT_AVAILABLE training-load-pro-sample: type: object properties: date: type: string format: date description: Date in format YYYY-MM-DD. example: "2023-01-01" cardio-load: type: number format: float description: User cardio load value. example: 1.0 muscle-load: type: number format: float description: User muscle load value. example: 1.0 perceived-load: type: number format: float description: User perceived load value. example: 1.0 cardio-load-interpretation: $ref: '#/components/schemas/training-load-pro-load-enum' muscle-load-interpretation: $ref: '#/components/schemas/training-load-pro-load-enum' perceived-load-interpretation: $ref: '#/components/schemas/training-load-pro-load-enum' user-rpe: $ref: '#/components/schemas/training-load-pro-rpe-enum' cardio-load-schema: description: List of cardio loads. type: array items: $ref: '#/components/schemas/cardio-load' cardio-load: description: Cardio load model. properties: date: type: string format: date description: Date in format YYYY-MM-DD. example: "2023-01-01" cardio_load_status: $ref: '#/components/schemas/cardio-load-status-enum' cardio_load: type: number format: float example: 0.2 description: Cardio load (training impulse, TRIMP) shows your cardiac response to a training session. strain: type: number format: float example: 0.3 description: Strain shows how much you have strained yourself with training lately. It shows your average daily load from the past 7 days. tolerance: type: number format: float example: 0.4 description: Tolerance describes how prepared you are to endure cardio training. It shows your average daily load from the past 28 days. cardio_load_ratio: type: number format: float example: 0.1 description: Ratio between strain and tolerance. cardio_load_level: $ref: "#/components/schemas/cardio-load-levels" cardio-load-status-enum: description: Text representation of cardio load status. type: string enum: - LOAD_STATUS_NOT_AVAILABLE - DETRAINING - MAINTAINING - PRODUCTIVE - OVERREACHING - RECOVERY_AFTER_OVERREACHING - PRODUCTIVE_DROPPED_FROM_OVERREACHING - PRODUCTIVE_ALMOST_OVERREACHING - UNRECOGNIZED cardio-load-levels: description: Cardio load levels indicate how hard a training session was compared to your session average from the past 90 days. type: object properties: very_low: type: number format: float example: 0.1 low: type: number format: float example: 0.1 medium: type: number format: float example: 0.1 high: type: number format: float example: 0.1 very-high: type: number format: float example: 0.1 AvailableUserData: type: object xml: name: available-user-data properties: user-id: type: integer format: int64 example: 475 description: User identifier who has available data. data-type: type: string example: ACTIVITY_SUMMARY description: Type of available data. enum: - EXERCISE - ACTIVITY_SUMMARY - PHYSICAL_INFORMATION url: type: string example: 'https://www.polaraccesslink.com/v3/users/475/activity-transactions' description: URI pointing to transaction initiation endpoint for user description: Model contains information of the data available. DurationZone: type: object xml: name: activity-zones properties: index: type: integer format: int32 example: 1 xml: attribute: true description: Activity zone index inzone: type: string example: PT51M5S description: Time duration spent in the zone ISO 8601 description: Model contains the time spent in certain activity zone. HeartRate: type: object properties: average: type: integer format: int32 example: 129 description: Average heart-rate maximum: type: integer format: int32 example: 147 description: Maximum heart-rate description: Heart-rate statistics information UserExtraInfo: type: object xml: name: extra-info properties: value: type: string example: '2' description: Value provided by the customer index: type: integer format: int32 example: 0 xml: attribute: true description: Item index name: type: string example: number-of-children xml: attribute: true description: Name of the extra info asked from customer description: User's answers to the custom extra-info fields requested by partners activity: type: object properties: id: type: integer format: int64 example: 1234 xml: attribute: true description: Activity summary id polar-user: type: string example: 'https://www.polaraccesslink/v3/users/1' xml: attribute: true description: Absolute link to user owning the activity transaction-id: type: integer format: int64 example: 179879 xml: attribute: true description: Id of the activity-transaction this activity was transferred in date: type: string example: '2010-12-31' description: 'Date when activity summary was recorded, in format YYYY-MM-DD' created: type: string example: '2016-04-27T20:11:33.000Z' description: >- The time activity summary was created in AccessLink, in format YYYY-MM-DDTHH:mm:ss.SSS calories: type: integer format: int32 example: 2329 description: Total daily calories in kilo calories including BMR active-calories: type: integer format: int32 example: 428 description: >- Total daily calories not including BMR. Precise calculation requires that user's physical data is entered into Polar Flow duration: type: string example: PT2H44M description: The time interval as specified in ISO 8601 active-steps: type: integer format: int32 example: 250 description: >- You could consider this as a kind of activity unit. If you take one step the active-steps should increase by one and any activity comparable to one physical step would also increase the number by one description: Summary of user's daily activity xml: name: activity array-of-activity-summary-with-all-samples: type: array items: $ref: '#/components/schemas/activity-summary-with-all-samples' description: >- Array of activity summaries with all samples. Each item in the array contains a summary of the activity for a specific day, including all samples. xml: name: activity-summary-with-all-samples activity-summary-with-all-samples: type: object properties: start_time: type: string example: '2025-08-13T08:15:30' description: Start time of the activity in UTC end_time: type: string example: '2025-08-13T23:59:59' description: End time of the activity in UTC active_duration: type: string example: PT3H11M description: The duration of the activity in ISO8601 format inactive_duration: type: string example: PT18H23M30S description: The duration of the inactivity in ISO8601 format daily_activity: type: number format: float example: 89.1 description: Daily activity score / percentage calories: type: integer format: int32 example: 2500 description: Total calories burned during the day active_calories: type: integer format: int32 example: 1500 description: Active calories burned during the day, excluding BMR steps: type: integer format: int32 example: 8823 description: Total number of steps taken during the day inactivity_alert_count: type: integer format: int32 example: 1 description: Number of inactivity alerts received during the day distance_from_steps: type: number format: float example: 4590.53 description: Distance covered based on steps taken, in meters samples: $ref: '#/components/schemas/activity-day-with-samples' description: Activity days with all samples. xml: name: activity-summary-with-all-samples activity-summary: type: object properties: start_time: type: string example: '2025-08-13T08:15:30' description: Start time of the activity in UTC end_time: type: string example: '2025-08-13T23:59:59' description: End time of the activity in UTC active_duration: type: string example: PT3H11M description: The duration of the activity in ISO8601 format inactive_duration: type: string example: PT18H23M30S description: The duration of the inactivity in ISO8601 format daily_activity: type: number format: float example: 89.1 description: Daily activity score / percentage calories: type: integer format: int32 example: 2500 description: Total calories burned during the day active_calories: type: integer format: int32 example: 1500 description: Active calories burned during the day, excluding BMR steps: type: integer format: int32 example: 8823 description: Total number of steps taken during the day inactivity_alert_count: type: integer format: int32 example: 1 description: Number of inactivity alerts received during the day distance_from_steps: type: number format: float example: 4590.53 description: Distance covered based on steps taken, in meters activity-log: type: object properties: activity-log: type: array description: >- Absolute links to individual activity summaries within the transaction items: type: string example: - https://www.polaraccesslink.com/v3/users/12/activity-transactions/34/activities/56 - https://www.polaraccesslink.com/v3/users/12/activity-transactions/34/activities/120 description: Activity transaction container xml: name: activity-logs activity-step-sample: type: object properties: steps: type: integer format: int32 description: >- Number of steps in sample segment. If element is null, step samples are not available for current segment. time: type: string example: '12:37:33.000' description: Start time of sample segment. description: Model contains number of steps in certain time period. xml: name: sample array-of-activity-day-with-samples: type: array items: $ref: '#/components/schemas/activity-day-with-samples' description: >- Array of activity days with samples. Each item in the array contains a summary of the activity for a specific day, including all samples. xml: name: activity-day-with-samples activity-day-with-samples: type: object properties: date: type: string example: '2022-02-10' description: Activity day date steps: $ref: '#/components/schemas/activity-steps2' activity_zones: $ref: '#/components/schemas/activity-zone-samples2' inactivity_stamps: type: array items: type: object properties: stamp: type: string example: '2022-02-10T16:04' description: time of inactivity stamp description: Activity day samples. xml: name: activity-day-with-samples activity-steps2: type: object properties: interval_ms: type: integer format: int32 description: Sample interval in milliseconds. total_steps: type: integer format: int32 description: Total number of steps in activity day. samples: type: array items: $ref: '#/components/schemas/activity-step-sample2' description: List of individual step sample objects. description: >- Activity step samples for a day. Contains total number of steps and list of individual step samples with time and number of steps in that time period. Note that consecutive repeated (same steps count) samples are filtered out from the list to reduce the payload size. If time between two consecutive samples is larger than interval_ms, one or more samples have been filtered out. activity-step-sample2: type: object properties: steps: type: integer format: int32 description: >- Number of steps in sample segment. timestamp: type: string example: '2025-08-14T00:02' description: Start time of sample segment. description: Model contains number of steps in certain time period. activity-step-samples: type: object properties: date: type: string example: '2022-02-10' description: Activity step sample date interval: type: integer format: int32 description: Sample interval in minutes. samples: type: array xml: wrapped: true description: List of individual step sample objects. items: $ref: '#/components/schemas/activity-step-sample' description: Wrapper model for partner step samples. xml: name: activity-step-samples activity-zone-sample: type: object properties: activity-zones: type: array description: List of heart rate zones with duration. items: $ref: '#/components/schemas/DurationZone' time: type: string description: Start time of sample segment. description: Model contains number of steps in certain time period. xml: name: sample activity-zone-sample2: type: object properties: zone: type: string description: Activity zone type. enum: - SEDENTARY - LIGHT - SLEEP - MODERATE - VIGOROUS timestamp: type: string example: '2025-08-14T00:08:30' activity-zone-samples2: type: object properties: samples: type: array description: List of activity zones samples. items: $ref: '#/components/schemas/activity-zone-sample2' activity-zone-samples: type: object properties: date: type: string example: '2022-02-10' description: Activity zone sample date interval: type: integer format: int32 description: Sample interval in minutes. samples: type: array xml: wrapped: true description: List of individual zone sample objects. items: $ref: '#/components/schemas/activity-zone-sample' description: >- List containing the times (in zone) in different heart rate zones (i.e. Heart rate between lower and upper values). Zone is null if no zone information available. xml: name: activity-zone-samples available-user-datas: type: object properties: available-user-data: type: array description: List of available user datas. items: $ref: '#/components/schemas/AvailableUserData' description: 'AvailableUserDatas is a container model for AvailableUserData. ' xml: name: available-user-datas error: type: object description: Error model which contains useful info about the error occurred. properties: timestamp: type: string format: date-time description: Timestamp of the error. status: type: integer description: Http status code errorType: type: string description: Error type. message: type: string description: Human readable error message. corrId: type: string description: Correlation id of the response for problem solving and debugging use. exercise: type: object properties: id: type: integer format: int64 example: 1937529874 xml: attribute: true description: Id of the training session upload-time: type: string example: '2008-10-13T10:40:0.000Z' xml: attribute: true description: Time of the transfer from wrist unit to Polar database polar-user: type: string example: 'https://www.polaraccesslink/v3/users/1' xml: attribute: true description: Absolute link to Polar user owning the training transaction-id: type: integer format: int64 example: 179879 xml: attribute: true description: Id of the exercise-transaction this training was transferred in device: type: string example: Polar M400 description: Polar product used in training device-id: type: string example: 1111AAAA description: Id of the Polar device start-time: type: string example: '2008-10-13T10:40:02' description: Start time of the training session in local time start-time-utc-offset: type: integer format: int32 example: 180 description: The offset from UTC (in minutes) when the training session was started duration: type: string example: PT2H44M45S description: The duration of the training session as specified in ISO8601 calories: type: integer format: int32 example: 530 description: Expended calories during training in kilocalories distance: type: number format: float example: 1600.2 description: Distance in meters travelled during training heart-rate: $ref: '#/components/schemas/HeartRate' training-load: type: number format: float example: 143.22 description: Training load effect to user sport: type: string example: OTHER description: Sport name has-route: type: boolean example: true description: Boolean indicating if the exercise has route data club-id: type: integer format: int64 example: 999 description: >- Has value if the exercise is from "Flow For Club", otherwise not printed. Value -1 indicates that there were errors finding the club club-name: type: string example: Polar Club description: >- Has value if the exercise is from "Flow For Club", otherwise not printed. Value "Ambiguous club location. Please contact support." is printed in case of error (and the club-id is -1). detailed-sport-info: type: string example: RUNNING description: >- String containing the name of a Polar Flow-compatible sport, if one is set for the exercise. fat-percentage: type: integer format: int32 example: 60 description: >- Fat percentage of exercise calories. Has value if the exercise is from training device supporting Energy sources, otherwise not printed. carbohydrate-percentage: type: integer format: int32 example: 38 description: >- Carbohydrate percentage of exercise calories. Has value if the exercise is from training device supporting Energy sources, otherwise not printed. protein-percentage: type: integer format: int32 example: 2 description: >- Protein percentage of exercise calories. Has value if the exercise is from training device supporting Energy sources, otherwise not printed. running-index: type: integer format: int32 example: 51 description: >- Running index is a score automatically calculated every run based on your heart rate and speed data collected via GPS or stride sensor. training-load-pro: $ref: '#/components/schemas/training-load-pro-sample' description: Training session summary data xml: name: exercise exerciseHashId: type: object properties: id: type: string example: 2AC312F xml: attribute: true description: Hashed id of the training session upload_time: type: string example: '2008-10-13T10:40:02.000Z' xml: attribute: true description: Time of the transfer from wrist unit to Polar database polar_user: type: string example: 'https://www.polaraccesslink/v3/users/1' xml: attribute: true description: Absolute link to Polar user owning the training device: type: string example: Polar M400 description: Polar product used in training device_id: type: string example: 1111AAAA description: Id of the Polar device start_time: type: string example: '2008-10-13T10:40:02' description: Start time of the training session in local time start_time_utc_offset: type: integer format: int32 example: 180 description: The offset from UTC (in minutes) when the training session was started duration: type: string example: PT2H44M description: The duration of the training session as specified in ISO8601 calories: type: integer format: int32 example: 530 description: Expended calories during training in kilocalories distance: type: number format: float example: 1600 description: Distance in meters travelled during training heart_rate: $ref: '#/components/schemas/HeartRate' training_load: type: number format: float example: 143.22 description: Training load effect to user sport: type: string example: OTHER description: Sport name has_route: type: boolean example: true description: Boolean indicating if the exercise has route data club_id: type: integer format: int64 example: 999 description: >- Has value if the exercise is from "Flow For Club", otherwise not printed. Value -1 indicates that there were errors finding the club club_name: type: string example: Polar Club description: >- Has value if the exercise is from "Flow For Club", otherwise not printed. Value "Ambiguous club location. Please contact support." is printed in case of error (and the club-id is -1). detailed_sport_info: type: string example: WATERSPORTS_WATERSKI description: >- String containing the name of a Polar Flow-compatible sport, if one is set for the exercise. fat_percentage: type: integer format: int32 example: 60 description: >- Fat percentage of exercise calories. Has value if the exercise is from training device supporting Energy sources, otherwise not printed. carbohydrate_percentage: type: integer format: int32 example: 38 description: >- Carbohydrate percentage of exercise calories. Has value if the exercise is from training device supporting Energy sources, otherwise not printed. protein_percentage: type: integer format: int32 example: 2 description: >- Protein percentage of exercise calories. Has value if the exercise is from training device supporting Energy sources, otherwise not printed. running-index: type: integer format: int32 example: 51 description: >- Running index is a score automatically calculated every run based on your heart rate and speed data collected via GPS or stride sensor. heart_rate_zones: description: >- Heart rate zones for this exercise. Returned when query parameter 'zones=true' is used. type: array items: $ref: '#/components/schemas/zone' samples: description: >- List of all samples available for this exercise. Returned when query parameter 'samples=true' is used. type: array items: $ref: '#/components/schemas/sample' route: description: >- List of all route points/locations available for this exercise. Returned when query parameter 'route=true' is used. type: array items: $ref: '#/components/schemas/location' training_load_pro: $ref: '#/components/schemas/training-load-pro-sample' description: Training session summary data exercisesHashId: type: array description: List of exercises. items: $ref: '#/components/schemas/exerciseHashId' exercises: type: object properties: exercises: type: array description: Absolute links to individual exercises within the transaction items: type: string example: - https://www.polaraccesslink.com/v3/users/12/exercise-transactions/34/exercises/56 - https://www.polaraccesslink.com/v3/users/12/exercise-transactions/34/exercises/120 description: Exercise transaction container xml: name: exercises physical-info: type: object properties: weight: type: number format: float description: User's weight in kilograms. example: 70.5 height: type: number format: float description: User's height in centimeters. example: 175.0 created: type: string format: date-time description: Creation timestamp of the physical info. example: '2024-06-01T12:00:00Z' modified: type: string format: date-time description: Last modification timestamp of the physical info. example: '2024-06-10T12:00:00Z' birthday: type: string format: date description: User's date of birth. example: '1990-01-01' gender: type: string description: User's gender. enum: [MALE, FEMALE] example: MALE maximum_heart_rate: type: integer format: int32 description: User's maximum heart rate. example: 190 resting_heart_rate: type: integer format: int32 description: User's resting heart rate. example: 60 aerobic_threshold: type: integer format: int32 description: User's aerobic threshold. example: 140 anaerobic_threshold: type: integer format: int32 description: User's anaerobic threshold. example: 170 vo2_max: type: integer format: int32 description: User's VO2 max value. example: 50 weight_source: type: string description: Source of the weight information. enum: [SOURCE_DEFAULT, SOURCE_ESTIMATE, SOURCE_USER, SOURCE_MEASURED, SOURCE_KEEP] example: SOURCE_USER training_background: type: string description: User's training background. enum: [OCCASIONAL, REGULAR, FREQUENT, HEAVY, SEMI_PRO, PRO] example: REGULAR typical_day: type: string description: User's typical day description. enum: [MOSTLY_SITTING, MOSTLY_STANDING, MOSTLY_MOVING] example: MOSTLY_MOVING sleep_goal: type: string description: User's sleep goal as ISO 8601 duration. example: 'PT8H' physical-information: type: object properties: id: type: integer format: int64 example: 123 xml: attribute: true description: Physical information id transaction-id: type: integer format: int64 example: 179879 xml: attribute: true description: >- Id of the physical-information-transaction this physical information was transferred in created: type: string example: '2016-04-27T20:11:33.000Z' description: >- The time physical information was created in AccessLink, in format YYYY-MM-DDTHH:mm:ss.SSSZ polar-user: type: string example: 'https://www.polaraccesslink/v3/users/1' xml: attribute: true description: Absolute link to user owning the activity weight: type: number format: float example: 80 description: Weight height: type: number format: float example: 180 description: Height maximum-heart-rate: type: integer format: int32 example: 160 description: Maximum heart rate resting-heart-rate: type: integer format: int32 example: 60 description: Resting heart rate aerobic-threshold: type: integer format: int32 example: 123 description: Aerobic threshold anaerobic-threshold: type: integer format: int32 example: 123 description: Anaerobic threshold vo2-max: type: integer format: int32 example: 12 description: VO2 max weight-source: type: string example: SOURCE_MEASURED description: Weight source enum: - SOURCE_MEASURED - SOURCE_USER description: User's physical information xml: name: physical-information physical-informations: type: object properties: physical-informations: type: array description: >- Absolute links to individual physical information within the transaction items: type: string example: - https://www.polaraccesslink.com/v3/users/12/physical-information-transactions/12/physical-informations/56 - https://www.polaraccesslink.com/v3/users/12/physical-information-transactions/12/physical-informations/120 description: Physical information transaction container xml: name: physical-informations register: type: object required: - member-id properties: member-id: type: string example: User_id_999 description: Partner's custom identifier for user. description: Model for registering user to partner. xml: name: register sample: type: object properties: recording-rate: type: integer format: int32 example: 5 description: >- Sample recording rate in seconds. Null when recording rate is not applicable - currently only with RR-data. sample-type: type: string format: byte example: '1' description: Sample type data: type: string example: >- 0,100,102,97,97,101,103,106,96,89,88,87,98,108,113,112,114,115,118,121,121,121,121,123,117,119,122 description: >- Sample values as a comma-separated list of strings. Can contain null -values which indicate a situation where sensor was offline. description: Training session sample data xml: name: sample samples: type: object properties: samples: type: array description: List of URIs pointing to single sample type data. items: type: string xml: name: sample example: - https://www.polaraccesslink.com/v3/users/12/exercise-transactions/34/exercises/56/samples/0 - https://www.polaraccesslink.com/v3/users/12/exercise-transactions/34/exercises/56/samples/3 description: List of URIs pointing to single sample type data. xml: name: samples location: type: object properties: latitude: type: number format: double example: 60.21982833 description: The latitude, expressed in degrees. longitude: type: number format: double example: 25.13925 description: The longitude, expressed in degrees. time: type: string example: 'PT210.026S' description: The time, expressed as a duration. satellites: type: integer format: int64 example: 4 description: Satellites. A byte-sized value with a maximum of 63. fix: type: integer format: int64 example: 1 description: Fix. A byte-sized value with a maximum of three. description: Exercise route point/location. xml: name: location route: type: array items: $ref: '#/components/schemas/location' description: List of route points/locations of the exercise. xml: name: route wrapped: true transaction-location: type: object properties: transaction-id: type: integer format: int64 example: 122 description: Id of the created transaction resource-uri: type: string format: uri example: >- https://polaraccesslink.com/v3/users/21/physical-information-transactions/32 description: Absolute links to the created transaction description: Contains absolute link to the created transaction. xml: name: transaction-location user: type: object properties: polar-user-id: type: integer format: int64 example: 2278512 xml: attribute: true description: User's id in Polar database member-id: type: string example: i09u9ujj description: User's identifier in partner's database registration-date: type: string format: date-time example: '2011-10-14T12:50:37.000Z' description: Timestamp marked when ACCEPTED first-name: type: string example: Eka description: User's first name last-name: type: string example: Toka description: User's surname birthdate: type: string example: '1985-09-06' description: User's birthdate as YYYY-MM-DD gender: type: string example: MALE description: User's sex enum: - MALE - FEMALE weight: type: number format: float example: 66 description: User's weight in kg height: type: number format: float example: 170 description: Users height in centimeters extra-info: type: array xml: name: extra-info wrapped: true description: >- List containing answers given by the user to a number of partner-specific questions. Extra-info is null if there are no required fields defined by the partner. items: $ref: '#/components/schemas/UserExtraInfo' description: User's basic information xml: name: user createdWebhook: type: object properties: data: type: object properties: id: type: string example: abdf33 description: Id of the new webhook. events: type: array items: $ref: '#/components/schemas/webhookType' description: Subscribed event types. example: [ EXERCISE ] url: type: string format: uri example: https://myapp.example.com/acl_webhook description: Url where the webhook notification is sent. signature_secret_key: type: string example: abe1f3ae-fd33-11e8-8eb2-f2801f1b9fd1 description: Signing key for verifying that sender is actually Polar. webhookInfo: type: object properties: data: type: array items: type: object properties: id: type: string example: abdf33 description: Id of the webhook. events: type: array items: $ref: '#/components/schemas/webhookType' description: Subscribed event types. example: [ EXERCISE ] url: type: string format: uri example: https://myapp.example.com/acl_webhook description: Url where the webhook notification is sent. active: type: boolean example: true description: Is the webhook active. webhookPatch: type: object properties: events: type: array items: $ref: '#/components/schemas/webhookType' description: Type of events to subscribe. example: [ EXERCISE ] url: type: string format: uri example: https://myapp.example.com/acl_webhook description: Url where the webhook notification is sent. webhookPayloadExercise: description: Payload example for webhook payload for event type EXERCISE. This event is sent when new exercise data is available for the user. type: object properties: event: type: string example: EXERCISE description: Type of available data. user_id: type: integer format: int64 example: 475 description: Id of the user who has new data. entity_id: type: string example: 'aQlC83' description: Id of the available data. timestamp: type: string format: date-time example: '2018-05-15T14:22:24Z' description: Time when webhook notification is sent. url: type: string format: uri example: https://www.polaraccesslink.com/v3/exercises/aQlC83 description: Url to the new available data. webhookPayloadSleep: description: Payload example for webhook payload for event type SLEEP. This event is sent when new sleep data is available for the user. type: object properties: event: type: string example: SLEEP description: Type of available data. user_id: type: integer format: int64 example: 475 description: Id of the user who has new data. date: type: string example: '2019-12-31' description: Date of the available sleep data. timestamp: type: string format: date-time example: '2018-05-15T14:22:24Z' description: Time when webhook notification is sent. url: type: string format: uri example: https://www.polaraccesslink.com/v3/users/sleep/2019-12-31 description: Url to the new available data. webhookPayloadContinuousHeartRate: description: Payload example for webhook payload for event type CONTINUOUS_HEART_RATE. This event is sent when new continuous heart rate data is available for the user. type: object properties: event: type: string example: CONTINUOUS_HEART_RATE description: Type of available data. user_id: type: integer format: int64 example: 475 description: Id of the user who has new data. date: type: string example: '2022-09-30' description: Date of the available continuous hr data. timestamp: type: string format: date-time example: '2018-05-15T14:22:24Z' description: Time when webhook notification is sent. url: type: string format: uri example: https://www.polaraccesslink.com/v3/users/continuous-heart-rate/2022-09-30 description: Url to the new available data. webhookPayloadCircadianBedtime: description: Payload example for webhook payload for event type SLEEP_WISE_CIRCADIAN_BEDTIME. This event is sent when new circadian bedtime data is available for the user. type: object properties: event: type: string example: SLEEP_WISE_CIRCADIAN_BEDTIME description: Type of available data. user_id: type: integer format: int64 example: 475 description: Id of the user who has new data. from: type: string example: '2022-09-30' description: Start date of the available circadian bedtime data. to: type: string example: '2022-10-02' description: End date of the available circadian bedtime data. timestamp: type: string format: date-time example: '2022-10-02T14:22:24Z' description: Time when webhook notification is sent. url: type: string format: uri example: https://www.polaraccesslink.com/v3/users/sleepwise/circadian-bedtime/date?from=2022-09-30&to=2022-10-02 description: Url to the new available data. webhookPayloadAlertness: description: Payload example for webhook payload for event type SLEEP_WISE_ALERTNESS. This event is sent when new alertness data is available for the user. type: object properties: event: type: string example: SLEEP_WISE_ALERTNESS description: Type of available data. user_id: type: integer format: int64 example: 475 description: Id of the user who has new data. from: type: string example: '2022-09-30' description: Start date of the available alertness data. to: type: string example: '2022-10-02' description: End date of the available alertness data. timestamp: type: string format: date-time example: '2022-10-02T14:22:24Z' description: Time when webhook notification is sent. url: type: string format: uri example: https://www.polaraccesslink.com/v3/users/sleepwise/alertness/date?from=2022-09-30&to=2022-10-02 description: Url to the new available data. webhookPayloadActivitySummary: description: Payload example for webhook payload for event type ACTIVITY_SUMMARY. This event is sent when new activity summary data is available for the user. type: object properties: event: type: string example: ACTIVITY_SUMMARY description: Type of available data. user_id: type: integer format: int64 example: 475 description: Id of the user who has new data. date: type: string example: '2022-09-30' description: Date of the available activity summary data. timestamp: type: string format: date-time example: '2022-10-02T14:22:24Z' description: Time when webhook notification is sent. url: type: string format: uri example: https://www.polaraccesslink.com/v3/users/activities/2022-09-30 description: Url to the new available data. webhookPayloadPhysicalInformation: description: Payload example for webhook payload for event type PHYSICAL_INFORMATION. This event is sent when new physical information data is available for the user. type: object properties: event: type: string example: PHYSICAL_INFORMATION description: Type of available data. user_id: type: integer format: int64 example: 475 description: Id of the user who has new data. timestamp: type: string format: date-time example: '2025-12-31T14:22:24Z' description: Time when webhook notification is sent. url: type: string format: uri example: https://www.polaraccesslink.com/v3/users/physical-info description: Url to the new available data. webhookPing: type: object properties: timestamp: type: string format: date-time example: '2018-05-15T14:22:24Z' description: Time when webhook ping is sent. event: type: string enum: - PING description: Only possible value is PING for ping message. description: >- AccessLink sends ping message as HTTP POST to callback URL being registered when creating new or modifying webhook. Ping message is sent to verify webhook URL. Receiving service must response to ping message with 200 OK or the webhook is not created/modified. webhookRequest: type: object properties: events: type: array items: $ref: '#/components/schemas/webhookType' description: Type of events to subscribe. example: [ EXERCISE ] url: type: string format: uri example: https://myapp.example.com/acl_webhook description: Url where the webhook notification is sent. required: - events - url webhookType: type: string enum: - EXERCISE - SLEEP - CONTINUOUS_HEART_RATE - SLEEP_WISE_CIRCADIAN_BEDTIME - SLEEP_WISE_ALERTNESS - ACTIVITY_SUMMARY - PHYSICAL_INFORMATION description: Event type to subscribe. Currently EXERCISE, SLEEP, CONTINUOUS_HEART_RATE, SLEEP_WISE_CIRCADIAN_BEDTIME, SLEEP_WISE_ALERTNESS, ACTIVITY_SUMMARY and PHYSICAL_INFORMATION are supported. zone: type: object properties: index: type: integer format: int32 example: 1 description: Zone list index lower-limit: type: integer format: int32 example: 110 description: Lower heart-rate boundary of the zone upper-limit: type: integer format: int32 example: 130 description: Upper heart-rate boundary of the zone in-zone: type: string example: PT4S description: Time duration spent in the zone ISO 8601 description: Heart-rate zone information xml: name: zone zones: type: object properties: zone: type: array description: List of heart rate zones. items: $ref: '#/components/schemas/zone' description: >- List containing the times (in zone) in different heart rate zones (i.e. Heart rate between lower and upper values). Zone is null if no zone information available. xml: name: zones sleep: type: object properties: polar_user: type: string example: 'https://www.polaraccesslink/v3/users/1' description: Absolute link to user owning the sleep date: type: string format: date description: Result date of the sleep example: '2020-01-01' sleep_start_time: type: string format: date-time description: Start timestamp of the sleep as ISO-8601 datetime string example: '2020-01-01T00:39:07+03:00' sleep_end_time: type: string format: date-time description: End timestamp of the sleep as ISO-8601 datetime string example: '2020-01-01T09:19:37+03:00' device_id: type: string description: Id of the device the sleep was measured with example: 1111AAAA continuity: type: number format: float example: 2.1 description: >- Continuity is an estimate of how continuous the sleep was on a scale of 1.0 – 5.0, where 5.0 reflects uninterrupted sleep. The lower the value the more fragmented the sleep was. continuity_class: type: integer format: int32 example: 2 description: >- Verbal assessments of sleep continuity Very continuous sleep (5) Continuous sleep (4) Fairly continuous sleep (3) Fairly fragmented sleep (2) Fragmented sleep (1) light_sleep: type: integer format: int32 example: 1000 description: >- Total time in seconds spent in light sleep stage between when you fell asleep and when you woke up. Corresponds to N1+ N2 according to AASM classification. deep_sleep: type: integer format: int32 example: 1000 description: >- Total time in seconds spent in the deep sleep stage between when you fell asleep and when you woke up. Corresponds to N3 according to AASM classification. rem_sleep: type: integer format: int32 example: 1000 description: >- Total time in seconds spent in REM sleep stage between when you fell asleep and when you woke up. REM stands for rapid eye movement. unrecognized_sleep_stage: type: integer format: int32 example: 1000 description: >- Total time in seconds spent in unrecognised sleep stage. Sometimes it's impossible to recognize sleep stages. This might happen when, for example, the wrist strap is not tight enough, or if you sleep on your hand. sleep_score: type: integer format: int32 example: 80 description: >- Sleep score summarizes the amount and quality of your sleep into a single number on a scale of 1 – 100. Sleep score tells you how well you slept compared to the indicators of a good night's sleep based on the current sleep science. It consists of six components; sleep time, long interruptions, continuity, actual sleep, REM sleep, and deep sleep. total_interruption_duration: type: integer format: int32 example: 1000 description: >- The total time in seconds you spent awake between when you fell asleep and when you woke up. sleep_charge: type: integer format: int32 example: 3 description: >- Sleep score compared to your usual level from the past 28 days.Scale: much below usual (1) – below usual (2) – usual (3) – above usual (4) – much above usual(5). sleep_goal: type: integer format: int32 example: 28800 description: >- Time goal in seconds for sleep selected by user. A default value of the setting is based on age-related sleep duration recommendations. sleep_rating: type: integer format: int32 example: 3 description: >- Numeric value given by user for representing the quality of sleep. Selection scale: Very poorly(1), poorly(2), ok(3), well(4), very well(5). 0 means no value is given. short_interruption_duration: type: integer format: int32 example: 500 description: >- Total time in seconds of short interruptions. Short interruption is interruption in sleep of less than 90 seconds. long_interruption_duration: type: integer format: int32 example: 300 description: >- Total time in seconds of long interruptions. Long interruption is interruption in sleep of 90 seconds or more. sleep_cycles: type: integer format: int32 example: 6 description: >- Number of sleep cycles. group_duration_score: type: number format: float example: 100.0 description: >- Sleep score consists of six components that are grouped under three themes. Score for sleep duration theme looks at your sleep time compared to your ‘preferred sleep time’ setting and the age-related duration recommendations. Group duration score ranges from 1.0 to 100.0. It is interpreted as textual feedback: poor, moderate or good amount. group_solidity_score: type: number format: float example: 75.0 description: >- Sleep score consists of six components that are grouped under three themes. Score for sleep solidity theme is the average of the component scores of long interruptions, continuity and actual sleep. Group solidity score ranges from 1.0 to 100.0. It is interpreted as textual feedback: poor, moderate or good solidity. group_regeneration_score: type: number format: float example: 54.2 description: >- Sleep score consists of six components that are grouped under three themes. Score for regeneration theme is the average of the scores of REM sleep and deep sleep. Group regeneration score ranges from 1.0 to 100.0. It is interpreted as textual feedback: poor, moderate or good regeneration hypnogram: type: object example: { "00:39": 2, "00:50": 3, "01:23": 5 } description: >- The time span between when you fell asleep and when you woke up is classified into light, deep or REM sleep, or unrecognised or wake in 30-s epochs. 0 = WAKE, 1 = REM, 2 = LIGHTER NON-REM, 3 = LIGHT NON-REM, 4 = DEEP NON-REM, 5 = UNKNOWN (eg. due to bad skin contact). heart_rate_samples: type: object example: { "00:41": 76, "00:46": 77, "00:51": 76 } description: >- 5 min average samples of heart rate from the duration of the sleep. Default time between samples is 5 minutes. There may be periods with samples more often than every 5 minutes. Unit of samples is beats per minute (bpm). nights: type: object properties: nights: type: array description: List of sleep objects items: $ref: '#/components/schemas/sleep' description: Sleep list available-sleep: type: object properties: date: type: string format: date description: Result date of the sleep example: '2020-01-01' start_time: type: string format: date-time description: Start timestamp of the sleep as ISO-8601 datetime string example: '2020-01-01T00:39:07+03:00' end_time: type: string format: date-time description: End timestamp of the sleep as ISO-8601 datetime string example: '2020-01-01T09:39:07+03:00' available-sleeps: type: object properties: available: type: array description: List of available sleep data items: $ref: '#/components/schemas/available-sleep' nightly-recharge: type: object properties: polar_user: type: string example: 'https://www.polaraccesslink/v3/users/1' description: Absolute link to user owning the sleep date: type: string format: date description: Result date of the Nightly Recharge example: '2020-01-01' heart_rate_avg: type: integer format: int32 example: 70 description: >- Average heart rate as beats per minute (bpm) during a 4-hour period starting at 30 minutes after falling asleep. beat_to_beat_avg: type: integer format: int32 example: 816 description: >- Average time in milliseconds (ms) between successive heart beats during a 4-hour period starting at 30 minutes after falling asleep. heart_rate_variability_avg: type: integer format: int32 example: 28 description: >- Average variation in the time in milliseconds (ms) between successive heart beats during a 4-hour period starting at 30 minutes after falling asleep. The Heart rate variability is Root Mean Square of Successive Differences (RMSSD) in beat-to-beat intervals. breathing_rate_avg: type: number format: float example: 14.1 description: >- Average breathing rate as breaths per minute (bpm) during a 4-hour period starting at 30 minutes after falling asleep. nightly_recharge_status: type: integer format: int32 example: 3 description: >- The Nightly Recharge status shows how your body was able to recover from training and stress during the night. Scores for both ANS charge and sleep charge are taken into account. Nightly Recharge status has the following (6-item) scale: very poor (1) – poor (2) – compromised (3) – OK (4) – good (5) – very good (6). ans_charge: type: number format: float example: 0.0 description: ANS stands for autonomic nervous system. ANS charge is formed by measuring heart rate, heart rate variability and breathing rate during roughly the first four hours of your sleep. It is formed comparing your last night to your usual levels from the past 28 days. The scale is from -10.0 to +10.0. Around zero is your usual level. ans_charge_status: type: integer format: int32 example: 3 description: ANS charge status = much below usual (1) - below usual (2) - usual (3) - above usual (4) - much above usual (5) hrv_samples: type: object example: { "00:41": 14, "00:46": 14, "00:51": 15 } description: >- 5-minute average samples of heart rate variability. Unit of samples is milliseconds(ms). breathing_samples: type: object example: { "00:39": 13.4, "00:44": 13.5, "00:49": 13.5 } description: >- 5-minute average samples of breathing rate. Unit of samples is breaths per minute (bpm). continuous-heartrate: type: object properties: polar_user: type: string example: 'https://www.polaraccesslink/v3/users/1' description: Absolute link to user owning the continuous heart rate samples date: type: string format: date description: Result date of the Continuous Heart Rate example: '2020-01-01' heart_rate_samples: type: array items: type: object properties: heart_rate: type: integer description: Heart rate in beats per minute (bpm). sample_time: type: string description: Measurement time of heart rate in HH:mm:ss format. Device time used for measurement. example: { "polar_user": "https://polaraccesslink.com/v3/users/627139", "date": "2022-09-12", "heart_rate_samples": [ { "heart_rate": 63, "sample_time": "00:02:08" }, { "heart_rate": 62, "sample_time": "00:07:08" } ] } description: >- 5 min average samples of heart rate from the duration of the continuous heart rate measurement. Default time between samples is 5 minutes. There may be periods with samples more often than every 5 minutes. Unit of samples is beats per minute (bpm). recharges: type: object properties: recharges: type: array description: List of Nightly Recharge objects items: $ref: '#/components/schemas/nightly-recharge' description: Nightly Recharge list alertness: type: object properties: grade: type: number format: double example: 9.9 description: Grade grade_validity_seconds: type: integer format: int32 example: 57600 description: Grade validity seconds grade_type: type: string example: GRADE_TYPE_PRIMARY description: Grade type enum: - GRADE_TYPE_UNKNOWN - GRADE_TYPE_PRIMARY - GRADE_TYPE_ADDITIONAL grade_classification: type: string example: GRADE_CLASSIFICATION_STRONG description: Grade classification enum: - GRADE_CLASSIFICATION_UNKNOWN - GRADE_CLASSIFICATION_WEAK - GRADE_CLASSIFICATION_FAIR - GRADE_CLASSIFICATION_STRONG - GRADE_CLASSIFICATION_EXCELLENT validity: type: string example: VALIDITY_ESTIMATE description: Validity enum: - VALIDITY_UNKNOWN - VALIDITY_RESET - VALIDITY_NOT_VALID - VALIDITY_ESTIMATE - VALIDITY_VALID sleep_inertia: type: string example: SLEEP_INERTIA_MILD description: Sleep inertia enum: - SLEEP_INERTIA_UNKNOWN - SLEEP_INERTIA_NO_INERTIA - SLEEP_INERTIA_MILD - SLEEP_INERTIA_MODERATE - SLEEP_INERTIA_HEAVY sleep_type: type: string example: SLEEP_TYPE_PRIMARY description: Sleep type enum: - SLEEP_TYPE_UNKNOWN - SLEEP_TYPE_PRIMARY - SLEEP_TYPE_SECONDARY - SLEEP_TYPE_ARTIFICIAL result_type: type: string example: ALERTNESS_TYPE_HISTORY description: Result type enum: - ALERTNESS_TYPE_UNKNOWN - ALERTNESS_TYPE_PREDICTION - ALERTNESS_TYPE_HISTORY period_start_time: type: string format: date-time description: Alertness period start time (UTC) example: '2022-11-20T20:52:20' period_end_time: type: string format: date-time description: Alertness period end time (UTC) example: '2022-11-21T19:15:52' sleep_period_start_time: type: string format: date-time description: Sleep period start time (UTC) example: '2022-11-20T20:52:20.57' sleep_period_end_time: type: string format: date-time description: Sleep period end time (UTC) example: '2022-11-21T04:11:20.57' sleep_timezone_offset_minutes: type: integer format: int32 example: 120 description: Sleep timezone offset minutes hourly_data: type: array description: >- Alertness hourly data for the alertness period items: $ref: '#/components/schemas/alertness-hourly-data' description: Alertness period data example: { "grade": 9.9, "grade_validity_seconds": 57600, "grade_type": "GRADE_TYPE_PRIMARY", "grade_classification": "GRADE_CLASSIFICATION_STRONG", "validity": "VALIDITY_ESTIMATE", "sleep_inertia": "SLEEP_INERTIA_MILD", "sleep_type": "SLEEP_TYPE_PRIMARY", "result_type": "ALERTNESS_TYPE_HISTORY", "period_start_time": "2022-11-20T20:52:20", "period_end_time": "2022-11-21T19:15:52", "sleep_period_start_time": "2022-11-20T20:52:20.57", "sleep_period_end_time": "2022-11-21T04:11:20.57", "sleep_timezone_offset_minutes": 120, "hourly_data": [ { "validity": "VALIDITY_ESTIMATE", "alertness_level": "ALERTNESS_LEVEL_LOW", "start_time": "2022-11-21T04:12:00", "end_time": "2022-11-21T05:00:00" } ] } circadian-bedtime: type: object properties: validity: type: string example: VALIDITY_ESTIMATE description: Validity enum: - VALIDITY_UNKNOWN - VALIDITY_RESET - VALIDITY_NOT_VALID - VALIDITY_ESTIMATE - VALIDITY_VALID quality: type: string example: CIRCADIAN_BEDTIME_QUALITY_COMPROMISED description: Quality enum: - CIRCADIAN_BEDTIME_QUALITY_UNKNOWN - CIRCADIAN_BEDTIME_QUALITY_WEAK - CIRCADIAN_BEDTIME_QUALITY_COMPROMISED - CIRCADIAN_BEDTIME_QUALITY_CLEARLY_RECOGNIZABLE result_type: type: string example: CIRCADIAN_BEDTIME_TYPE_HISTORY description: Result type enum: - CIRCADIAN_BEDTIME_TYPE_UNKNOWN - CIRCADIAN_BEDTIME_TYPE_PREDICTION - CIRCADIAN_BEDTIME_TYPE_HISTORY period_start_time: type: string format: date-time description: Circadian bedtime period start time (UTC) example: '2022-11-20T21:18:30' period_end_time: type: string format: date-time description: Circadian bedtime period end time (UTC) example: '2022-11-21T05:18:30' preferred_sleep_period_start_time: type: string format: date-time description: Circadian bedtime preferred sleep period start time (UTC) example: '2022-11-20T21:18:30' preferred_sleep_period_end_time: type: string format: date-time description: Circadian bedtime preferred sleep period end time (UTC) example: '2022-11-21T05:18:30' sleep_gate_start_time: type: string format: date-time description: Circadian bedtime sleep gate (suggested fall a sleep window) start time (UTC) example: '2022-11-20T21:18:30' sleep_gate_end_time: type: string format: date-time description: Circadian bedtime sleep gate (suggested fall a sleep window) end time (UTC) example: '2022-11-21T05:18:30' sleep_timezone_offset_minutes: type: integer format: int32 example: 120 description: Sleep timezone offset minutes description: Circadian bedtime period data example: { "validity": "VALIDITY_ESTIMATE", "quality": "CIRCADIAN_BEDTIME_QUALITY_COMPROMISED", "result_type": "CIRCADIAN_BEDTIME_TYPE_HISTORY", "period_start_time": "2022-11-20T21:18:30", "period_end_time": "2022-11-21T05:18:30", "preferred_sleep_period_start_time": "2022-11-20T21:18:30", "preferred_sleep_period_end_time": "2022-11-21T05:18:30", "sleep_gate_start_time": "2022-11-20T21:03:30", "sleep_gate_end_time": "2022-11-20T21:33:30", "sleep_timezone_offset_minutes": 120 } alertness-hourly-data: type: object properties: validity: type: string example: VALIDITY_ESTIMATE description: Validity enum: - VALIDITY_UNKNOWN - VALIDITY_RESET - VALIDITY_NOT_VALID - VALIDITY_ESTIMATE - VALIDITY_VALID alertness_level: type: string example: ALERTNESS_LEVEL_VERY_HIGH description: Alertness level enum: - ALERTNESS_LEVEL_UNKNOWN - ALERTNESS_LEVEL_MINIMAL - ALERTNESS_LEVEL_VERY_LOW - ALERTNESS_LEVEL_LOW - ALERTNESS_LEVEL_HIGH - ALERTNESS_LEVEL_VERY_HIGH start_time: type: string format: date-time description: Alertness period start time (UTC) example: '2022-11-21T04:00:00' end_time: type: string format: date-time description: Alertness period end time (UTC) example: '2022-11-21T05:00:00' description: Hourly data for the alertness period body-temperature-period: type: object properties: source_device_id: type: string example: 1111AAAA measurement_type: type: string example: TM_CORE_TEMPERATURE description: Measurement type enum: - TM_UNKNOWN - TM_SKIN_TEMPERATURE - TM_CORE_TEMPERATURE sensor_location: type: string example: SL_PROXIMAL description: Sensor location enum: - SL_UNKNOWN - SL_DISTAL - SL_PROXIMAL start_time: type: string example: '2023-10-20T04:00:00' format: date-time description: Measurement period start time (UTC) end_time: type: string example: '2023-10-20T05:00:00' format: date-time description: Measurement period end time (UTC) modified_time: type: string example: '2023-10-20T04:00:00' format: date-time description: Measurement period modified time (UTC) samples: type: array items: $ref: '#/components/schemas/body-temperature-sample' body-temperature-sample: type: object properties: temperature_celsius: type: number example: 36.5 format: float recording_time_delta_milliseconds: type: integer example: 123 format: int64 pattern: '[0-9]+' skin-temperature: type: object properties: sleep_time_skin_temperature_celsius: type: number example: 36.5 format: float deviation_from_baseline_celsius: type: number example: 0.5 format: float sleep_date: type: string example: '2023-10-20' format: date skin-contact-period: type: object properties: source_device_id: type: string example: 1111AAAA start_time: type: string format: date-time description: Measurement period start time (UTC) example: '2023-10-20T04:00:00' end_time: type: string format: date-time description: Measurement period end time (UTC) example: '2023-10-20T05:00:00' modified_time: type: string format: date-time description: Measurement period modified time (UTC) example: '2023-10-20T04:00:00' skin_contact_changes: type: array items: $ref: '#/components/schemas/skin-contact-change' skin-contact-change: type: object properties: skin_contact: type: boolean example: true recording_time_delta_milliseconds: type: integer example: 123 format: int64 pattern: '[0-9]+' ecg-test-result: type: object properties: source_device_id: type: string example: 1111AAAA test_time: type: integer example: 1697787256 format: int64 time_zone_offset: type: integer example: 180 format: int32 average_heart_rate_bpm: type: integer example: 60 format: int32 heart_rate_variability_ms: type: number example: 0.0 format: float heart_rate_variability_level: type: string example: ECG_HRV_LEVEL_NO_BASELINE enum: - ECG_HRV_LEVEL_NO_BASELINE - ECG_HRV_LEVEL_BELOW_USUAL - ECG_HRV_LEVEL_USUAL - ECG_HRV_LEVEL_ABOVE_USUAL rri_ms: type: number example: 100.0 format: float pulse_transit_time_systolic_ms: type: number example: 100.0 format: float pulse_transit_time_diastolic_ms: type: number example: 100.0 format: float pulse_transit_time_quality_index: type: number example: 100.0 format: float samples: type: array items: $ref: '#/components/schemas/ecg-sample' quality_measurements: type: array items: $ref: '#/components/schemas/quality-measurement' ecg-sample: type: object properties: recording_time_delta_ms: type: integer example: 123 format: int32 amplitude_mv: type: number example: 0.1 format: float quality-measurement: type: object properties: recording_time_delta_ms: type: integer example: 123 format: int32 quality_level: type: string example: ECG_QUALITY_HIGH enum: - ECG_QUALITY_UNKNOWN - ECG_QUALITY_NO_CONTACT - ECG_QUALITY_LOW - ECG_QUALITY_HIGH spo2-test-result: type: object properties: source_device_id: type: string example: 1111AAAA test_time: type: integer example: 1697787256 format: int64 time_zone_offset: type: integer example: 180 format: int32 test_status: type: string example: SPO2_TEST_PASSED enum: - SPO2_TEST_PASSED - SPO2_TEST_INCONCLUSIVE_TOO_LOW_QUALITY_IN_SAMPLES - SPO2_TEST_INCONCLUSIVE_TOO_LOW_OVERALL_QUALITY - SPO2_TEST_INCONCLUSIVE_TOO_MANY_MISSING_SAMPLES blood_oxygen_percent: type: integer example: 95 format: int32 spo2_class: type: string example: SPO2_CLASS_NORMAL enum: - SPO2_CLASS_UNKNOWN - SPO2_CLASS_VERY_LOW - SPO2_CLASS_LOW - SPO2_CLASS_NORMAL spo2_value_deviation_from_baseline: type: string example: DEVIATION_NO_BASELINE enum: - DEVIATION_NO_BASELINE - DEVIATION_BELOW_USUAL - DEVIATION_USUAL - DEVIATION_ABOVE_USUAL spo2_quality_average_percent: type: number example: 90.0 format: float average_heart_rate_bpm: type: integer example: 60 format: int32 heart_rate_variability_ms: type: number example: 100.0 format: float spo2_hrv_deviation_from_baseline: type: string example: DEVIATION_NO_BASELINE enum: - DEVIATION_NO_BASELINE - DEVIATION_BELOW_USUAL - DEVIATION_USUAL - DEVIATION_ABOVE_USUAL altitude_meters: type: number example: 50.0 format: float