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: 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 does not require 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).
      <a href="https://support.polar.com/en/support/the_what_and_how_of_polars_continuous_heart_rate">Supported devices</a>
  - 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&trade;
    description: >-
      This resource allows partners to access their users' SleepWise&trade; data. All time values are UTC times.
      SleepWise&trade; data is calculated for [SleepWise&trade;](https://support.polar.com/en/polar-sleepwise) supported devices
      when minimum of 5 days of sleep data is available. SleepWise&trade; data consists of alertness periods and circadian bedtime periods.
  - name: Elixir&trade; Biosensing
    description: >-
      This resource allows partners to access their users' Elixir&trade; Biosensing data. All time values are UTC times.
      Elixir&trade; 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&trade;](https://www.polar.com/en/smart-coaching/polar-sleep-plus) and
      [Sleep Plus Stages&trade;](https://www.polar.com/en/smart-coaching/sleep-plus-stages). Available data is presented in
      section [Schemas](#schemas).
  - name: Nightly Recharge
    description: >-
      Nightly Recharge&trade; 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
    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).
  - 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.
      <br/><br/>
      This resource is deprecated. Please use non-transactional [Daily activity](#daily-activity--beta-) 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.
      <br/><br/>
      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/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 for past 28 days
      description: >-
        List users activities available in AccessLink. Only Activities uploaded to Flow in the last 28 days are returned.
      operationId: listActivitiesWithoutTransaction
      parameters:
        - 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 for past 28 days with all samples.
          content:
            application/json:
              schema: 
                $ref: '#/components/schemas/array-of-activity-summary-with-all-samples'
        '403':
          description: User has not accepted all mandatory consents.
        '401':
          description: Unauthorized.
      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/?from={from}&to={to}':
    get:
      tags:
        - Daily activity 
      summary: List activities for given date range
      description: >-
        List users activities available in AccessLink for given date range.
        From date cannot be older than 365 days from today and maximum range between from date and to date is 28 days.
      operationId: listActivitiesWithoutTransactionByDateRange
      parameters:
        - name: from
          in: query
          description: Start date in format YYYY-MM-DD.
          required: true
          schema:
            type: string
            format: date
        - 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
        - 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
          required: false
          schema:
            type: boolean
          description: include inactivity stamps for activity summary.
      responses:
        '200':
          description: List of users activities for given date range.
          content:
            application/json:
              schema: 
                $ref: '#/components/schemas/array-of-activity-summary-with-all-samples'
        '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 days with samples for past 28 days
      description: >-
        List users activity samples available in AccessLink. Only Activity samples uploaded to Flow in the last 28 days are returned.
      operationId: listActivitySamplesWithoutTransaction
      responses:
        '200':
          description: List of users activity samples for past 28 days.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/array-of-activity-day-with-samples'
        '403':
          description: User has not accepted all mandatory consents.
        '401':
          description: Unauthorized.
      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/activities/samples/?from={from}&to={to}':
    get:
      tags:
        - Daily activity 
      summary: List activity samples for given date range
      description: >-
        List users activity samples available in AccessLink for given date range.
        From date cannot be older than 365 days from today and maximum range between from date and to date is 28 days.
      operationId: listActivitySamplesWithoutTransactionByDateRange
      parameters:
        - name: from
          in: query
          description: Start date in format YYYY-MM-DD.
          required: true
          schema:
            type: string
            example: '2023-01-01'
            format: date
        - name: to
          in: query
          description: End date in format YYYY-MM-DD. If not given, defaults to today.
          required: false
          schema:
            type: string
            example: '2023-01-31'
            format: date
      responses:
        '200':
          description: List of users activity samples for given date range.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/array-of-activity-day-with-samples'
        '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
      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
      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
      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
      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 exits 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 exits 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.
        <a href="https://support.polar.com/en/support/the_what_and_how_of_polars_continuous_heart_rate"> Supported devices </a>
      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.
        <a href="https://support.polar.com/en/support/the_what_and_how_of_polars_continuous_heart_rate"> Supported devices </a>
      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.
      responses:
        '200':
          description: List of user cardio loads.
          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 
      parameters:
        - name: date
          in: path
          description: 'Inclusive start date of range as ISO-8601 date string, example: "2022-01-01"'
          required: true
          schema:
            format: date
            type: string
      summary: Get cardio load by date
      description: >-
        Returns cardio load data for selected 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&trade; 
      summary: Alertness period data (last 28 days)
      description: >-
        Get user's alertness period data for the last 28 days.
        <a href="https://support.polar.com/en/polar-sleepwise"> Supported devices </a>
      responses:
        '200':
          description: Request was successful.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/alertness'
        '400':
          description: Invalid request.
        '401':
          description: Unauthorized.
        '204':
          description: No data found for last 28 days.
        '403':
          description: User has not accepted all mandatory consents.
      security:
        - OAuth2:
            - accesslink.read_all
  '/v3/users/sleepwise/alertness/date':
    get:
      tags:
        - SleepWise&trade; 
      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. <a href="https://support.polar.com/en/polar-sleepwise"> Supported devices </a>
      responses:
        '200':
          description: Request was successful.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/alertness'
        '400':
          description: Invalid request.
        '401':
          description: Unauthorized.
        '204':
          description: No data found for date range.
        '403':
          description: User has not accepted all mandatory consents.
      security:
        - OAuth2:
            - accesslink.read_all
  '/v3/users/sleepwise/circadian-bedtime':
    get:
      tags:
        - SleepWise&trade; 
      summary: Circadian bedtime period data (last 28 days)
      description: >-
        Get user's circadian bedtime period data for the last 28 days.
        <a href="https://support.polar.com/en/polar-sleepwise"> Supported devices </a>
      responses:
        '200':
          description: Request was successful.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/circadian-bedtime'
        '400':
          description: Invalid request.
        '401':
          description: Unauthorized.
        '204':
          description: No data found for last 28 days.
        '403':
          description: User has not accepted all mandatory consents.
      security:
        - OAuth2:
            - accesslink.read_all
  '/v3/users/sleepwise/circadian-bedtime/date':
    get:
      tags:
        - SleepWise&trade; 
      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. <a href="https://support.polar.com/en/polar-sleepwise"> Supported devices </a>
      responses:
        '200':
          description: Request was successful.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/circadian-bedtime'
        '400':
          description: Invalid request.
        '401':
          description: Unauthorized.
        '204':
          description: No data found for date range.
        '403':
          description: User has not accepted all mandatory consents.
      security:
        - OAuth2:
            - accesslink.read_all
  '/v3/users/biosensing/bodytemperature':
    get:
      tags:
        - Elixir&trade; 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&trade; 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&trade; 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&trade; 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&trade; 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 training 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
            format: SEDENTARY
            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: >-
            <a href="https://support.polar.com/en/support/tips/Running_Index_feature#"> 
            Running index</a> 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: >-
            <a href="https://support.polar.com/en/support/tips/Running_Index_feature#">
            Running index</a> 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-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 training 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 hear 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
      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
      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
      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-31'
          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-31
          description: Url to the new available data.
    webhookPayloadCircadianBedtime:
      description:
        Payload example for webhook payload for event type SLEEP_WISE_CIRCADIAN_BEDTIME
      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-31'
          description: For consistency use period for all descriptions
        to:
          type: string
          example: '2022-10-02'
          description: For consistency use period for all descriptions
        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-31&to=2022-10-02
          description: Url to the new available data.
    webhookPayloadAlertness:
      description:
        Payload example for webhook payload for event type SLEEP_WISE_ALERTNESS
      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-31'
          description: For consistency use period for all descriptions
        to:
          type: string
          example: '2022-10-02'
          description: For consistency use period for all descriptions
        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-31&to=2022-10-02
          description: Url to the new available data.
    webhookPayloadActivitySummary:
        description:
            Payload example for webhook payload for event type ACTIVITY_SUMMARY
        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-31'
            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-31
            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
      description: Event type to subscribe. Currently EXERCISE, SLEEP, CONTINUOUS_HEART_RATE, SLEEP_WISE_CIRCADIAN_BEDTIME, SLEEP_WISE_ALERTNESS and ACTIVITY_SUMMARY 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 selectedby 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": 6
          }
          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: object
          properties:
            heart_rate:
              type: integer
              description: heart rate rpm
            sample_time:
              type: string
              format: date
              description: Measurement time of heart rate. 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: number
          format: int
          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
          description: Alertness period start time (UTC)
          example: '2022-11-20T20:52:20'
        period_end_time:
          type: string
          format: date
          description: Alertness period end time (UTC)
          example: '2022-11-21T19:15:52'
        sleep_period_start_time:
          type: string
          format: date
          description: Sleep period start time (UTC)
          example: '2022-11-20T20:52:20.57'
        sleep_period_end_time:
          type: string
          format: date
          description: Sleep period end time (UTC)
          example: '2022-11-21T04:11:20.57'
        sleep_timezone_offset_minutes:
          type: number
          format: int
          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
          description: Circadian bedtime period start time (UTC)
          example: '2022-11-20T21:18:30'
        period_end_time:
          type: string
          format: date
          description: Circadian bedtime period end time (UTC)
          example: '2022-11-21T05:18:30'
        preferred_sleep_period_start_time:
          type: string
          format: date
          description: Circadian bedtime preferred sleep period start time (UTC)
          example: '2022-11-20T21:18:30'
        preferred_sleep_period_end_time:
          type: string
          format: date
          description: Circadian bedtime preferred sleep period end time (UTC)
          example: '2022-11-21T05:18:30'
        sleep_gate_start_time:
          type: string
          format: date
          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
          description: Circadian bedtime sleep gate (suggested fall a sleep window) end time (UTC)
          example: '2022-11-21T05:18:30'
        sleep_timezone_offset_minutes:
          type: number
          format: int
          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
          description: Alertness period start time (UTC)
          example: '2022-11-21T04:00:00'
        end_time:
          type: string
          format: date
          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: uint32
        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: uint32
        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