GithubHelp home page GithubHelp logo

hedgertronic / oura-ring Goto Github PK

View Code? Open in Web Editor NEW
22.0 1.0 6.0 162 KB

Tools for acquiring and analyzing Oura API data.

License: MIT License

Python 100.00%
oura oura-api-v2 oura-cloud-api oura-ring python

oura-ring's Introduction

Oura Ring for Python

Tools for acquiring and analyzing Oura API data.

Oura is a wearable ring for monitoring sleep, activity, and workouts.

Contents

Installation

The oura_ring module can be installed via pip:

pip install oura-ring

Getting Started

In order to use the Oura client, you must first generate a personal_access_token for your Oura account.

It is best practice to store this value in a .env file:

# Oura credentials
PERSONAL_ACCESS_TOKEN="<PERSONAL_ACCESS_TOKEN>"

You can use python-dotenv to load the enviroment variables for use in code:

import os
from dotenv import load_dotenv

load_dotenv()

pat = os.getenv("PERSONAL_ACCESS_TOKEN") or ""

Once the environment variables are loaded, an OuraClient object can be created:

from oura_ring import OuraClient

# Using a traditional constructor
client = OuraClient(pat)
...

# Using a context manager
with OuraClient(pat) as client:
    ...

API Requests

There are nine different API requests that OuraClient can make. Full Oura API v2 documentation can be found on Oura's website.

Get Personal Info

Method: get_personal_info()

Payload: None

Example Response:

{
    "id": "8f9a5221-639e-4a85-81cb-4065ef23f979",
    "age": 31,
    "weight": 74.8,
    "height": 1.8,
    "biological_sex": "male",
    "email": "[email protected]"
}

Get Daily Sleep

Method: get_daily_sleep(start_date: str = <end_date - 1 day>, end_date: str = <today's date>)

Payload:

  • start_date: The earliest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to one day before the end_date parameter.
  • end_date: The latest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to today's date.

Example Response:

[
    {
        "id": "8f9a5221-639e-4a85-81cb-4065ef23f979",
        "contributors": {
            "deep_sleep": 57,
            "efficiency": 98,
            "latency": 81,
            "rem_sleep": 20,
            "restfulness": 54,
            "timing": 84,
            "total_sleep": 60
        },
        "day": "2022-07-14",
        "score": 63,
        "timestamp": "2022-07-14T00:00:00+00:00"
    },
    ...
]

Get Daily Activity

Method: get_daily_activity(start_date: str = <end_date - 1 day>, end_date: str = <today's date>)

Payload:

  • start_date: The earliest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to one day before the end_date parameter.
  • end_date: The latest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to today's date.

Example Response:

[
    {
        "id": "8f9a5221-639e-4a85-81cb-4065ef23f979",
        "class_5_min": "<long sequence of 0|1|2|3|4|5>",
        "score": 82,
        "active_calories": 1222,
        "average_met_minutes": 1.90625,
        "contributors": {
            "meet_daily_targets": 43,
            "move_every_hour": 100,
            "recovery_time": 100,
            "stay_active": 98,
            "training_frequency": 71,
            "training_volume": 98
        },
        "equivalent_walking_distance": 20122,
        "high_activity_met_minutes": 444,
        "high_activity_time": 3000,
        "inactivity_alerts": 0,
        "low_activity_met_minutes": 117,
        "low_activity_time": 10020,
        "medium_activity_met_minutes": 391,
        "medium_activity_time": 6060,
        "met": {
            "interval": 60,
            "items": [
                0.1,
                ...
            ],
            "timestamp": "2021-11-26T04:00:00.000-08:00"
        },
        "meters_to_target": -16200,
        "non_wear_time": 27480,
        "resting_time": 18840,
        "sedentary_met_minutes": 10,
        "sedentary_time": 21000,
        "steps": 18430,
        "target_calories": 350,
        "target_meters": 7000,
        "total_calories": 3446,
        "day": "2021-11-26",
        "timestamp": "2021-11-26T04:00:00-08:00"
    },
    ...
]

Get Daily Readiness

Method: get_daily_readiness(start_date: str = <end_date - 1 day>, end_date: str = <today's date>)

Payload:

  • start_date: The earliest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to one day before the end_date parameter.
  • end_date: The latest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to today's date.

Example Response:

[
    {
        "id": "8f9a5221-639e-4a85-81cb-4065ef23f979",
        "contributors": {
            "activity_balance": 56,
            "body_temperature": 98,
            "hrv_balance": 75,
            "previous_day_activity": None,
            "previous_night": 35,
            "recovery_index": 47,
            "resting_heart_rate": 94,
            "sleep_balance": 73
        },
        "day": "2021-10-27",
        "score": 66,
        "temperature_deviation": -0.2,
        "temperature_trend_deviation": 0.1,
        "timestamp": "2021-10-27T00:00:00+00:00"
    },
    ...
]

Get Enhanced Tag

Method: get_enhanced_tag(start_date: str = <end_date - 1 day>, end_date: str = <today's date>)

Payload:

  • start_date: The earliest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to one day before the end_date parameter.
  • end_date: The latest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to today's date.

Example Response:

[
    {
        "id": "8f9a5221-639e-4a85-81cb-4065ef23f979",
        "tag_type_code": "string",
        "start_time": "2019-08-24T14:15:22Z",
        "end_time": "2019-08-24T14:15:22Z",
        "start_day": "2019-08-24",
        "end_day": "2019-08-24",
        "comment": "string"
    },
    ...
]

Get Heart Rate

Method: get_heart_rate(start_datetime: str = <end_date - 1 day>, end_datetime: str = <today's date>)

Payload:

  • start_datetime: The earliest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DDThh:mm:ss). Defaults to one day before the end_datetime parameter.
  • end_datetime: The latest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DDThh:mm:ss). Defaults to today's date.

Example Response:

[
    {
        "bpm": 60,
        "source": "sleep",
        "timestamp": "2021-01-01T01:02:03+00:00"
    },
    ...
]

Get Sleep Periods

Method: get_sleep_periods(start_date: str = <end_date - 1 day>, end_date: str = <today's date>)

Payload:

  • start_date: The earliest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to one day before the end_date parameter.
  • end_date: The latest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to today's date.

Example Response:

[
    {
        "id": "8f9a5221-639e-4a85-81cb-4065ef23f979",
        "average_breath": 12.625,
        "average_heart_rate": 4.25,
        "average_hrv": 117,
        "awake_time": 4800,
        "bedtime_end": "2022-07-12T09:25:14-07:00",
        "bedtime_start": "2022-07-12T01:05:14-07:00",
        "day": "2022-07-12",
        "deep_sleep_duration": 4170,
        "efficiency": 84,
        "heart_rate": {
            "interval": 300,
            "items": [
                None,
                50,
                46,
                ...
            ],
            "timestamp": "2022-07-12T01:05:14.000-07:00"
        },
        "hrv": {
            "interval": 300,
            "items": [
                None,
                -102,
                -122,
                ...
            ],
            "timestamp": "2022-07-12T01:05:14.000-07:00"
        },
        "latency": 540,
        "light_sleep_duration": 18750,
        "low_battery_alert": False,
        "lowest_heart_rate": 48,
        "movement_30_sec": "<long sequence of 1|2|3>",
        "period": 0,
        "readiness_score_delta": 0,
        "rem_sleep_duration": 2280,
        "restless_periods": 415,
        "sleep_phase_5_min": "<long sequence of 1|2|3|4>",
        "sleep_score_delta": 0,
        "time_in_bed": 30000,
        "total_sleep_duration": None,
        "type": "long_sleep"
    },
    ...
]

Get Sleep Time

Method: get_sleep_time(start_date: str = <end_date - 1 day>, end_date: str = <today's date>)

Payload:

  • start_date: The earliest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to one day before the end_date parameter.
  • end_date: The latest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to today's date.

Example Response:

[
    {
        "id": "8f9a5221-639e-4a85-81cb-4065ef23f979",
        "day": "2019-08-24",
        "optimal_bedtime": {
            "day_tz": 0,
            "end_offset": 0,
            "start_offset": 0
        },
        "recommendation": "improve_efficiency",
        "status": "not_enough_nights"
    },
    ...
]

Get Ring Configuration

Method: get_ring_configuration(start_date: str = <end_date - 1 day>, end_date: str = <today's date>)

Payload:

  • start_date: The earliest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to one day before the end_date parameter.
  • end_date: The latest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to today's date.

Example Response:

[
    {
        "id": "8f9a5221-639e-4a85-81cb-4065ef23f979",
        "color": "glossy_black",
        "design": "heritage",
        "firmware_version": "string",
        "hardware_type": "gen1",
        "set_up_at": "2019-08-24T14:15:22Z",
        "size": 0
    },
    ...
]

Get Rest Mode Period

Method: get_rest_mode_period(start_date: str = <end_date - 1 day>, end_date: str = <today's date>)

Payload:

  • start_date: The earliest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to one day before the end_date parameter.
  • end_date: The latest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to today's date.

Example Response:

[
    {
        "id": "8f9a5221-639e-4a85-81cb-4065ef23f979",
        "end_day": "2019-08-24",
        "end_time": "2019-08-24T14:15:22Z",
        "episodes": [
            {
                "tags": [
                      "string"
                ],
                "timestamp": "2019-08-24T14:15:22Z"
            }
        ],
        "start_day": "2019-08-24",
        "start_time": "2019-08-24T14:15:22Z"
    },
    ...
]

Get Sessions

Method: get_sessions(start_date: str = <end_date - 1 day>, end_date: str = <today's date>)

Payload:

  • start_date: The earliest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to one day before the end_date parameter.
  • end_date: The latest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to today's date.

Example Response:

[
    {
        "id": "8f9a5221-639e-4a85-81cb-4065ef23f979",
        "day": "2021-11-12",
        "start_datetime": "2021-11-12T12:32:09-08:00",
        "end_datetime": "2021-11-12T12:40:49-08:00",
        "type": "rest",
        "heart_rate": None,
        "heart_rate_variability": None,
        "mood": None,
        "motion_count": {
            "interval": 5,
            "items": [
                0
            ],
            "timestamp": "2021-11-12T12:32:09.000-08:00"
        }
    },
    ...
]

Get Daily SpO2

Method: get_daily_spo2(start_date: str = <end_date - 1 day>, end_date: str = <today's date>)

Payload:

  • start_date: The earliest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to one day before the end_date parameter.
  • end_date: The latest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to today's date.

Example Response:

[
    {
        "id": "8f9a5221-639e-4a85-81cb-4065ef23f979",
        "day": "2019-08-24",
        "spo2_percentage": {
            "average": 0
        }
    },
  ...
]

Get Daily Stress

Method: get_daily_stress(start_date: str = <end_date - 1 day>, end_date: str = <today's date>)

Payload:

  • start_date: The earliest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to one day before the end_date parameter.
  • end_date: The latest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to today's date.

Example Response:

[
    {
        "id": "8f9a5221-639e-4a85-81cb-4065ef23f979",
        "day": "2019-08-24",
        "stress_high": 0,
        "recovery_high": 0,
        "day_summary": "restored"
    },
    ...
]

Get Tags

Method: get_tags(start_date: str = <end_date - 1 day>, end_date: str = <today's date>)

Payload:

  • start_date: The earliest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to one day before the end_date parameter.
  • end_date: The latest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to today's date.

Example Response:

[
    {
        "id": "8f9a5221-639e-4a85-81cb-4065ef23f979",
        "day": "2021-01-01",
        "text": "Need coffee",
        "timestamp": "2021-01-01T01:02:03-08:00",
        "tags": [
            "tag_generic_nocaffeine"
        ]
    },
    ...
]

Get Workouts

Method: get_workouts(start_date: str = <end_date - 1 day>, end_date: str = <today's date>)

Payload:

  • start_date: The earliest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to one day before the end_date parameter.
  • end_date: The latest date for which to get data. Expected in ISO 8601 format (YYYY-MM-DD). Defaults to today's date.

Example Response:

[
    {
        "id": "8f9a5221-639e-4a85-81cb-4065ef23f979",
        "activity": "cycling",
        "calories": 300,
        "day": "2021-01-01",
        "distance": 13500.5,
        "end_datetime": "2021-01-01T01:00:00.000000+00:00",
        "intensity": "moderate",
        "label": None,
        "source": "manual",
        "start_datetime": "2021-01-01T01:30:00.000000+00:00"
    },
    ...
]

Usage With DataFrame

Using Oura API data with a Pandas DataFrame is very straightforward:

>>> import pandas as pd

>>> sleep = client.get_daily_sleep()
>>> pd.json_normalize(sleep)

          day  score                  timestamp  contributors.deep_sleep  \
0  2022-09-01     76  2022-09-01T00:00:00+00:00                       99
1  2022-09-02     81  2022-09-02T00:00:00+00:00                      100

   contributors.efficiency  contributors.latency  contributors.rem_sleep  \
0                       90                    99                      79
1                       88                    75                      95

   contributors.restfulness  contributors.timing  contributors.total_sleep
0                        55                   15                        85
1                        56                   28                        96

[2 rows x 10 columns]

>>> readiness = client.get_daily_readiness()
>>> pd.json_normalize(readiness)

          day  score  temperature_deviation  temperature_trend_deviation  \
0  2022-09-01     87                  -0.09                         0.24
1  2022-09-02     91                  -0.03                         0.11

                   timestamp  contributors.activity_balance  \
0  2022-09-01T00:00:00+00:00                             80
1  2022-09-02T00:00:00+00:00                             86

   contributors.body_temperature  contributors.hrv_balance  \
0                            100                        84
1                            100                        85

  contributors.previous_day_activity  contributors.previous_night  \
0                               None                           75
1                               None                           88

   contributors.recovery_index  contributors.resting_heart_rate  \
0                          100                              100
1                           94                               98

   contributors.sleep_balance
0                          87
1                          93

[2 rows x 13 columns]

oura-ring's People

Contributors

hedgertronic avatar kalifg avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

oura-ring's Issues

Additional Oura V2 API Endpoints

Hi, I just wanted to let the project maintainer know that Oura has implemented a few additional endpoints to their V2 API since the last time this project was updated.

Among the new endpoints are:

  • Daily SPO2
  • Rest Mode Period
  • Ring Configuration
  • Sleep Time

Additionally, entries from existing endpoints have been assigned an id value, and can be accessed individually at the endpoints
/v2/usercollection/{collection name}/{document_id} (e.g. https://api.ouraring.com/v2/usercollection/daily_activity/2-5daccc095220cc5493a4e9c2b681ca941e')

Details are at https://cloud.ouraring.com/v2/docs
Just reporting, in case you want to include these new endpoints.

Python Versioning Install Error

I have Python 3.7 installed, but when I go to pip install oura-ring, I receive the error:

ERROR: Could not find a version that satisfies the requirement oura-ring (from versions: none)
ERROR: No matching distribution found for oura-ring

I also tried installing via zip, but the following error came:

ERROR: Package 'oura-ring' requires a different Python: 3.7.12 not in '<4.0,>=3.10'
Note: you may need to restart the kernel to use updated packages.

Can you please let me know what I can do to fix this?

Heart rate endpoint never returns any values

I think this is because the v2 heartrate endpoint is expecting datetimes for start_datetime and end_datetime, while this library is sending only dates via start_date/end_date.

Docs: (https://cloud.ouraring.com/v2/docs#operation/Multiple_Heart_Rate_Documents_v2_usercollection_heartrate_get)

Examples

Successful, with datetimes

curl --location --request GET 'https://api.ouraring.com/v2/usercollection/heartrate?start_datetime=2024-01-12T00:00:00-06:00&end_
datetime=2024-01-13T00:00:00-06:00' --header 'Authorization: Bearer MY_TOKEN'
{"data":[{"bpm":78,"source":"rest","timestamp":"2024-01-12T06:04:46+00:00"},{"bpm":79,"source":"rest","timestamp":"2024-01-12T06:09:46+00:00"},{"bpm":75,"source":"rest","timestamp":"2024-01-12T06:14:46+00:00"},{"bpm":76,"source":"rest","timestamp":"2024-01-12T06:19:46+00:00"},{"bpm":76,"source":"rest","timestamp":"2024-01-12T06:24:46+00:00"},{"bpm":77,"source":"rest","timestamp":"2024-01-12T06:29:46+00:00"},{"bpm":77,"source":"rest","timestamp":"2024-01-12T06:34:46+00:00"},{"bpm":77,"source":"rest","timestamp":"2024-01-12T06:39:46+00:00"},{"bpm":79,"source":"rest","timestamp":"2024-01-12T06:44:46+00:00"},{"bpm":76,"source":"rest","timestamp":"2024-01-12T06:49:46+00:00"},{"bpm":75,"source":"rest","timestamp":"2024-01-12T06:54:46+00:00"},{"bpm":73,"source":"rest","timestamp":"2024-01-12T06:59:46+00:00"},{"bpm":73,"source":"rest","timestamp":"2024-01-12T07:04:46+00:00"},{"bpm":71,"source":"rest","timestamp":"2024-01-12T07:09:46+00:00"},{"bpm":71,"source":"rest","timestamp":"2024-01-12T07:14:46+00:00"},{"bpm":70,"source":"rest","timestamp":"2024-01-12T07:19:46+00:00"},{"bpm":71,"source":"rest","timestamp":"2024-01-12T07:24:46+00:00"},{"bpm":71,"source":"rest","timestamp":"2024-01-12T07:29:46+00:00"},{"bpm":73,"source":"rest","timestamp":"2024-01-12T07:34:46+00:00"},{"bpm":74,"source":"rest","timestamp":"2024-01-12T07:39:46+00:00"},{"bpm":73,"source":"rest","timestamp":"2024-01-12T07:44:46+00:00"},{"bpm":68,"source":"rest","timestamp":"2024-01-12T07:49:48+00:00"},{"bpm":69,"source":"rest","timestamp":"2024-01-12T07:54:48+00:00"},{"bpm":70,"source":"rest","timestamp":"2024-01-12T07:59:48+00:00"},{"bpm":69,"source":"rest","timestamp":"2024-01-12T08:04:48+00:00"},{"bpm":66,"source":"rest","timestamp":"2024-01-12T08:09:48+00:00"},{"bpm":65,"source":"rest","timestamp":"2024-01-12T08:14:48+00:00"},{"bpm":65,"source":"rest","timestamp":"2024-01-12T08:19:46+00:00"},{"bpm":65,"source":"rest","timestamp":"2024-01-12T08:24:46+00:00"},{"bpm":64,"source":"rest","timestamp":"2024-01-12T08:29:46+00:00"},{"bpm":62,"source":"rest","timestamp":"2024-01-12T08:34:46+00:00"},{"bpm":63,"source":"rest","timestamp":"2024-01-12T08:39:46+00:00"},{"bpm":64,"source":"rest","timestamp":"2024-01-12T08:44:46+00:00"},{"bpm":64,"source":"rest","timestamp":"2024-01-12T08:49:48+00:00"},{"bpm":63,"source":"rest","timestamp":"2024-01-12T08:54:48+00:00"},{"bpm":62,"source":"rest","timestamp":"2024-01-12T08:59:48+00:00"},{"bpm":62,"source":"rest","timestamp":"2024-01-12T09:04:48+00:00"},{"bpm":66,"source":"rest","timestamp":"2024-01-12T09:09:48+00:00"},{"bpm":61,"source":"rest","timestamp":"2024-01-12T09:14:48+00:00"},{"bpm":60,"source":"rest","timestamp":"2024-01-12T09:19:46+00:00"},{"bpm":59,"source":"rest","timestamp":"2024-01-12T09:24:46+00:00"},{"bpm":60,"source":"rest","timestamp":"2024-01-12T09:29:46+00:00"},{"bpm":62,"source":"rest","timestamp":"2024-01-12T09:34:46+00:00"},{"bpm":62,"source":"rest","timestamp":"2024-01-12T09:39:46+00:00"},{"bpm":60,"source":"rest","timestamp":"2024-01-12T09:44:46+00:00"},{"bpm":61,"source":"rest","timestamp":"2024-01-12T09:49:48+00:00"},{"bpm":62,"source":"rest","timestamp":"2024-01-12T09:54:48+00:00"},{"bpm":61,"source":"rest","timestamp":"2024-01-12T09:59:48+00:00"},{"bpm":62,"source":"rest","timestamp":"2024-01-12T10:04:48+00:00"},{"bpm":63,"source":"rest","timestamp":"2024-01-12T10:09:48+00:00"},{"bpm":58,"source":"rest","timestamp":"2024-01-12T10:14:48+00:00"},{"bpm":60,"source":"rest","timestamp":"2024-01-12T10:19:46+00:00"},{"bpm":62,"source":"rest","timestamp":"2024-01-12T10:24:46+00:00"},{"bpm":61,"source":"rest","timestamp":"2024-01-12T10:29:46+00:00"},{"bpm":59,"source":"rest","timestamp":"2024-01-12T10:34:46+00:00"},{"bpm":59,"source":"rest","timestamp":"2024-01-12T10:39:46+00:00"},{"bpm":60,"source":"rest","timestamp":"2024-01-12T10:44:46+00:00"},{"bpm":59,"source":"rest","timestamp":"2024-01-12T10:49:46+00:00"},{"bpm":60,"source":"rest","timestamp":"2024-01-12T10:54:46+00:00"},{"bpm":62,"source":"rest","timestamp":"2024-01-12T10:59:46+00:00"},{"bpm":60,"source":"rest","timestamp":"2024-01-12T11:04:46+00:00"},{"bpm":57,"source":"rest","timestamp":"2024-01-12T11:09:46+00:00"},{"bpm":56,"source":"rest","timestamp":"2024-01-12T11:14:46+00:00"},{"bpm":57,"source":"rest","timestamp":"2024-01-12T11:19:48+00:00"},{"bpm":60,"source":"rest","timestamp":"2024-01-12T11:24:48+00:00"},{"bpm":61,"source":"rest","timestamp":"2024-01-12T11:29:48+00:00"},{"bpm":61,"source":"rest","timestamp":"2024-01-12T11:34:48+00:00"},{"bpm":60,"source":"rest","timestamp":"2024-01-12T11:39:48+00:00"},{"bpm":56,"source":"rest","timestamp":"2024-01-12T11:44:48+00:00"},{"bpm":58,"source":"rest","timestamp":"2024-01-12T11:49:46+00:00"},{"bpm":57,"source":"rest","timestamp":"2024-01-12T11:54:46+00:00"},{"bpm":55,"source":"rest","timestamp":"2024-01-12T11:59:46+00:00"},{"bpm":57,"source":"rest","timestamp":"2024-01-12T12:04:46+00:00"},{"bpm":55,"source":"rest","timestamp":"2024-01-12T12:09:46+00:00"},{"bpm":59,"source":"rest","timestamp":"2024-01-12T12:14:46+00:00"},{"bpm":57,"source":"rest","timestamp":"2024-01-12T12:19:48+00:00"},{"bpm":57,"source":"rest","timestamp":"2024-01-12T12:24:48+00:00"},{"bpm":56,"source":"rest","timestamp":"2024-01-12T12:29:48+00:00"},{"bpm":56,"source":"rest","timestamp":"2024-01-12T12:34:48+00:00"},{"bpm":56,"source":"rest","timestamp":"2024-01-12T12:39:48+00:00"},{"bpm":56,"source":"rest","timestamp":"2024-01-12T12:44:48+00:00"},{"bpm":57,"source":"rest","timestamp":"2024-01-12T12:49:46+00:00"},{"bpm":55,"source":"rest","timestamp":"2024-01-12T12:54:46+00:00"},{"bpm":57,"source":"rest","timestamp":"2024-01-12T12:59:46+00:00"},{"bpm":57,"source":"rest","timestamp":"2024-01-12T13:04:46+00:00"},{"bpm":58,"source":"rest","timestamp":"2024-01-12T13:09:46+00:00"},{"bpm":58,"source":"rest","timestamp":"2024-01-12T13:14:46+00:00"},{"bpm":58,"source":"rest","timestamp":"2024-01-12T13:19:02+00:00"},{"bpm":56,"source":"rest","timestamp":"2024-01-12T13:24:02+00:00"},{"bpm":56,"source":"rest","timestamp":"2024-01-12T13:29:02+00:00"},{"bpm":65,"source":"awake","timestamp":"2024-01-12T13:47:47+00:00"},{"bpm":70,"source":"awake","timestamp":"2024-01-12T13:47:50+00:00"},{"bpm":61,"source":"awake","timestamp":"2024-01-12T13:47:51+00:00"},{"bpm":66,"source":"awake","timestamp":"2024-01-12T13:57:17+00:00"},{"bpm":64,"source":"awake","timestamp":"2024-01-12T13:57:37+00:00"},{"bpm":62,"source":"awake","timestamp":"2024-01-12T13:57:49+00:00"},{"bpm":66,"source":"awake","timestamp":"2024-01-12T14:02:00+00:00"},{"bpm":62,"source":"awake","timestamp":"2024-01-12T14:02:44+00:00"},{"bpm":70,"source":"awake","timestamp":"2024-01-12T14:02:51+00:00"},{"bpm":69,"source":"awake","timestamp":"2024-01-12T15:17:17+00:00"},{"bpm":71,"source":"awake","timestamp":"2024-01-12T15:17:19+00:00"},{"bpm":68,"source":"awake","timestamp":"2024-01-12T15:17:25+00:00"},{"bpm":74,"source":"awake","timestamp":"2024-01-12T15:21:59+00:00"},{"bpm":69,"source":"awake","timestamp":"2024-01-12T15:22:01+00:00"},{"bpm":79,"source":"awake","timestamp":"2024-01-12T15:23:25+00:00"},{"bpm":71,"source":"awake","timestamp":"2024-01-12T15:27:20+00:00"},{"bpm":69,"source":"awake","timestamp":"2024-01-12T15:27:34+00:00"},{"bpm":69,"source":"awake","timestamp":"2024-01-12T15:32:06+00:00"},{"bpm":71,"source":"awake","timestamp":"2024-01-12T15:32:35+00:00"},{"bpm":73,"source":"awake","timestamp":"2024-01-12T15:32:43+00:00"},{"bpm":72,"source":"awake","timestamp":"2024-01-12T15:42:46+00:00"},{"bpm":68,"source":"awake","timestamp":"2024-01-12T15:43:15+00:00"},{"bpm":65,"source":"awake","timestamp":"2024-01-12T15:43:19+00:00"},{"bpm":65,"source":"awake","timestamp":"2024-01-12T16:02:12+00:00"},{"bpm":67,"source":"awake","timestamp":"2024-01-12T16:02:22+00:00"},{"bpm":73,"source":"awake","timestamp":"2024-01-12T16:02:28+00:00"},{"bpm":89,"source":"awake","timestamp":"2024-01-12T16:12:27+00:00"},{"bpm":77,"source":"awake","timestamp":"2024-01-12T16:12:32+00:00"},{"bpm":84,"source":"awake","timestamp":"2024-01-12T16:12:41+00:00"},{"bpm":76,"source":"awake","timestamp":"2024-01-12T18:33:13+00:00"},{"bpm":71,"source":"awake","timestamp":"2024-01-12T18:33:24+00:00"},{"bpm":68,"source":"awake","timestamp":"2024-01-12T18:33:31+00:00"},{"bpm":79,"source":"awake","timestamp":"2024-01-12T19:43:17+00:00"},{"bpm":83,"source":"awake","timestamp":"2024-01-12T19:43:22+00:00"},{"bpm":75,"source":"awake","timestamp":"2024-01-12T19:43:33+00:00"},{"bpm":129,"source":"awake","timestamp":"2024-01-12T21:42:22+00:00"},{"bpm":133,"source":"awake","timestamp":"2024-01-12T21:42:33+00:00"},{"bpm":125,"source":"awake","timestamp":"2024-01-12T21:42:38+00:00"},{"bpm":120,"source":"awake","timestamp":"2024-01-12T21:46:22+00:00"},{"bpm":125,"source":"awake","timestamp":"2024-01-12T21:46:34+00:00"},{"bpm":116,"source":"awake","timestamp":"2024-01-12T21:46:35+00:00"},{"bpm":119,"source":"awake","timestamp":"2024-01-12T21:48:44+00:00"},{"bpm":110,"source":"awake","timestamp":"2024-01-12T21:48:45+00:00"},{"bpm":115,"source":"awake","timestamp":"2024-01-12T21:49:09+00:00"},{"bpm":107,"source":"awake","timestamp":"2024-01-12T21:51:02+00:00"},{"bpm":112,"source":"awake","timestamp":"2024-01-12T21:51:04+00:00"},{"bpm":110,"source":"awake","timestamp":"2024-01-12T21:51:05+00:00"},{"bpm":110,"source":"awake","timestamp":"2024-01-12T21:52:54+00:00"},{"bpm":109,"source":"awake","timestamp":"2024-01-12T21:52:55+00:00"},{"bpm":115,"source":"awake","timestamp":"2024-01-12T21:55:11+00:00"},{"bpm":112,"source":"awake","timestamp":"2024-01-12T21:55:24+00:00"},{"bpm":117,"source":"awake","timestamp":"2024-01-12T21:56:08+00:00"},{"bpm":114,"source":"awake","timestamp":"2024-01-12T22:00:17+00:00"},{"bpm":118,"source":"awake","timestamp":"2024-01-12T22:00:21+00:00"},{"bpm":108,"source":"awake","timestamp":"2024-01-12T22:00:40+00:00"},{"bpm":109,"source":"awake","timestamp":"2024-01-12T22:05:28+00:00"},{"bpm":112,"source":"awake","timestamp":"2024-01-12T22:05:29+00:00"},{"bpm":114,"source":"awake","timestamp":"2024-01-12T22:05:46+00:00"},{"bpm":113,"source":"awake","timestamp":"2024-01-12T22:08:19+00:00"},{"bpm":110,"source":"awake","timestamp":"2024-01-12T22:08:32+00:00"},{"bpm":105,"source":"awake","timestamp":"2024-01-12T22:08:43+00:00"},{"bpm":107,"source":"awake","timestamp":"2024-01-12T22:10:36+00:00"},{"bpm":110,"source":"awake","timestamp":"2024-01-12T22:10:54+00:00"},{"bpm":112,"source":"awake","timestamp":"2024-01-12T22:11:02+00:00"},{"bpm":114,"source":"awake","timestamp":"2024-01-12T22:16:00+00:00"},{"bpm":110,"source":"awake","timestamp":"2024-01-12T22:16:30+00:00"},{"bpm":107,"source":"awake","timestamp":"2024-01-12T22:17:04+00:00"},{"bpm":108,"source":"awake","timestamp":"2024-01-12T22:20:56+00:00"},{"bpm":103,"source":"awake","timestamp":"2024-01-12T22:21:45+00:00"},{"bpm":113,"source":"awake","timestamp":"2024-01-12T22:21:54+00:00"},{"bpm":106,"source":"awake","timestamp":"2024-01-12T22:26:14+00:00"},{"bpm":109,"source":"awake","timestamp":"2024-01-12T22:26:29+00:00"},{"bpm":100,"source":"awake","timestamp":"2024-01-12T22:26:53+00:00"},{"bpm":108,"source":"awake","timestamp":"2024-01-12T22:31:13+00:00"},{"bpm":112,"source":"awake","timestamp":"2024-01-12T22:31:19+00:00"},{"bpm":100,"source":"awake","timestamp":"2024-01-12T22:31:26+00:00"},{"bpm":103,"source":"awake","timestamp":"2024-01-12T22:33:40+00:00"},{"bpm":99,"source":"awake","timestamp":"2024-01-12T22:34:21+00:00"},{"bpm":107,"source":"awake","timestamp":"2024-01-12T22:35:07+00:00"},{"bpm":108,"source":"awake","timestamp":"2024-01-12T22:38:34+00:00"},{"bpm":102,"source":"awake","timestamp":"2024-01-12T22:39:07+00:00"},{"bpm":104,"source":"awake","timestamp":"2024-01-12T22:39:12+00:00"},{"bpm":103,"source":"awake","timestamp":"2024-01-12T22:43:47+00:00"},{"bpm":97,"source":"awake","timestamp":"2024-01-12T22:43:49+00:00"},{"bpm":100,"source":"awake","timestamp":"2024-01-12T22:43:51+00:00"},{"bpm":98,"source":"awake","timestamp":"2024-01-12T22:51:12+00:00"},{"bpm":100,"source":"awake","timestamp":"2024-01-12T22:51:37+00:00"},{"bpm":95,"source":"awake","timestamp":"2024-01-12T22:51:41+00:00"},{"bpm":97,"source":"awake","timestamp":"2024-01-12T22:57:09+00:00"},{"bpm":100,"source":"awake","timestamp":"2024-01-12T22:57:10+00:00"},{"bpm":96,"source":"awake","timestamp":"2024-01-12T22:57:18+00:00"},{"bpm":97,"source":"awake","timestamp":"2024-01-12T23:01:58+00:00"},{"bpm":101,"source":"awake","timestamp":"2024-01-12T23:01:59+00:00"},{"bpm":99,"source":"awake","timestamp":"2024-01-12T23:02:11+00:00"},{"bpm":94,"source":"awake","timestamp":"2024-01-12T23:04:40+00:00"},{"bpm":88,"source":"awake","timestamp":"2024-01-12T23:04:54+00:00"},{"bpm":87,"source":"awake","timestamp":"2024-01-12T23:04:56+00:00"},{"bpm":94,"source":"awake","timestamp":"2024-01-12T23:19:20+00:00"},{"bpm":90,"source":"awake","timestamp":"2024-01-12T23:19:24+00:00"},{"bpm":97,"source":"awake","timestamp":"2024-01-12T23:20:35+00:00"},{"bpm":93,"source":"awake","timestamp":"2024-01-12T23:29:25+00:00"},{"bpm":95,"source":"awake","timestamp":"2024-01-12T23:29:45+00:00"},{"bpm":104,"source":"awake","timestamp":"2024-01-13T00:03:13+00:00"},{"bpm":108,"source":"awake","timestamp":"2024-01-13T00:04:00+00:00"},{"bpm":98,"source":"awake","timestamp":"2024-01-13T00:04:01+00:00"},{"bpm":96,"source":"awake","timestamp":"2024-01-13T00:08:51+00:00"},{"bpm":92,"source":"awake","timestamp":"2024-01-13T00:09:51+00:00"},{"bpm":99,"source":"awake","timestamp":"2024-01-13T00:09:55+00:00"},{"bpm":101,"source":"awake","timestamp":"2024-01-13T00:14:04+00:00"},{"bpm":110,"source":"awake","timestamp":"2024-01-13T00:14:10+00:00"},{"bpm":107,"source":"awake","timestamp":"2024-01-13T00:14:29+00:00"},{"bpm":95,"source":"awake","timestamp":"2024-01-13T00:24:40+00:00"},{"bpm":93,"source":"awake","timestamp":"2024-01-13T00:24:44+00:00"},{"bpm":97,"source":"awake","timestamp":"2024-01-13T00:24:56+00:00"},{"bpm":88,"source":"awake","timestamp":"2024-01-13T00:30:11+00:00"},{"bpm":93,"source":"awake","timestamp":"2024-01-13T00:30:37+00:00"},{"bpm":90,"source":"awake","timestamp":"2024-01-13T00:31:08+00:00"},{"bpm":90,"source":"awake","timestamp":"2024-01-13T00:34:28+00:00"},{"bpm":88,"source":"awake","timestamp":"2024-01-13T00:34:41+00:00"},{"bpm":83,"source":"awake","timestamp":"2024-01-13T00:34:44+00:00"},{"bpm":89,"source":"awake","timestamp":"2024-01-13T00:37:19+00:00"},{"bpm":87,"source":"awake","timestamp":"2024-01-13T00:37:57+00:00"},{"bpm":85,"source":"awake","timestamp":"2024-01-13T00:38:01+00:00"},{"bpm":90,"source":"awake","timestamp":"2024-01-13T00:46:50+00:00"},{"bpm":87,"source":"awake","timestamp":"2024-01-13T00:47:18+00:00"},{"bpm":93,"source":"awake","timestamp":"2024-01-13T00:47:52+00:00"},{"bpm":88,"source":"awake","timestamp":"2024-01-13T00:57:33+00:00"},{"bpm":90,"source":"awake","timestamp":"2024-01-13T00:57:36+00:00"},{"bpm":89,"source":"awake","timestamp":"2024-01-13T00:57:37+00:00"},{"bpm":86,"source":"awake","timestamp":"2024-01-13T01:04:27+00:00"},{"bpm":88,"source":"awake","timestamp":"2024-01-13T01:05:28+00:00"},{"bpm":95,"source":"awake","timestamp":"2024-01-13T01:24:20+00:00"},{"bpm":90,"source":"awake","timestamp":"2024-01-13T01:24:32+00:00"},{"bpm":91,"source":"awake","timestamp":"2024-01-13T01:25:06+00:00"},{"bpm":88,"source":"awake","timestamp":"2024-01-13T01:44:38+00:00"},{"bpm":91,"source":"awake","timestamp":"2024-01-13T01:45:18+00:00"},{"bpm":86,"source":"awake","timestamp":"2024-01-13T01:45:22+00:00"},{"bpm":92,"source":"awake","timestamp":"2024-01-13T01:49:27+00:00"},{"bpm":89,"source":"awake","timestamp":"2024-01-13T01:49:31+00:00"},{"bpm":90,"source":"awake","timestamp":"2024-01-13T01:49:32+00:00"},{"bpm":90,"source":"awake","timestamp":"2024-01-13T01:51:53+00:00"},{"bpm":90,"source":"awake","timestamp":"2024-01-13T01:52:13+00:00"},{"bpm":92,"source":"awake","timestamp":"2024-01-13T01:52:17+00:00"},{"bpm":90,"source":"awake","timestamp":"2024-01-13T01:53:52+00:00"},{"bpm":94,"source":"awake","timestamp":"2024-01-13T01:55:12+00:00"},{"bpm":92,"source":"awake","timestamp":"2024-01-13T01:55:26+00:00"},{"bpm":97,"source":"awake","timestamp":"2024-01-13T01:59:02+00:00"},{"bpm":93,"source":"awake","timestamp":"2024-01-13T01:59:12+00:00"},{"bpm":89,"source":"awake","timestamp":"2024-01-13T01:59:55+00:00"},{"bpm":90,"source":"awake","timestamp":"2024-01-13T02:11:53+00:00"},{"bpm":91,"source":"awake","timestamp":"2024-01-13T02:11:56+00:00"},{"bpm":93,"source":"awake","timestamp":"2024-01-13T02:12:02+00:00"},{"bpm":99,"source":"awake","timestamp":"2024-01-13T02:16:56+00:00"},{"bpm":90,"source":"awake","timestamp":"2024-01-13T02:17:28+00:00"},{"bpm":92,"source":"awake","timestamp":"2024-01-13T02:17:32+00:00"},{"bpm":91,"source":"awake","timestamp":"2024-01-13T02:19:17+00:00"},{"bpm":93,"source":"awake","timestamp":"2024-01-13T02:19:24+00:00"},{"bpm":95,"source":"awake","timestamp":"2024-01-13T02:19:44+00:00"},{"bpm":93,"source":"awake","timestamp":"2024-01-13T02:24:59+00:00"},{"bpm":95,"source":"awake","timestamp":"2024-01-13T02:25:30+00:00"},{"bpm":92,"source":"awake","timestamp":"2024-01-13T02:25:50+00:00"},{"bpm":89,"source":"awake","timestamp":"2024-01-13T02:40:41+00:00"},{"bpm":91,"source":"awake","timestamp":"2024-01-13T02:40:44+00:00"},{"bpm":86,"source":"awake","timestamp":"2024-01-13T02:41:12+00:00"},{"bpm":88,"source":"awake","timestamp":"2024-01-13T02:57:18+00:00"},{"bpm":90,"source":"awake","timestamp":"2024-01-13T02:57:38+00:00"},{"bpm":91,"source":"awake","timestamp":"2024-01-13T02:57:55+00:00"},{"bpm":93,"source":"awake","timestamp":"2024-01-13T03:01:35+00:00"},{"bpm":89,"source":"awake","timestamp":"2024-01-13T03:01:37+00:00"},{"bpm":91,"source":"awake","timestamp":"2024-01-13T03:01:44+00:00"},{"bpm":84,"source":"awake","timestamp":"2024-01-13T03:03:54+00:00"},{"bpm":90,"source":"awake","timestamp":"2024-01-13T03:04:31+00:00"},{"bpm":87,"source":"awake","timestamp":"2024-01-13T03:04:38+00:00"},{"bpm":86,"source":"awake","timestamp":"2024-01-13T03:09:08+00:00"},{"bpm":88,"source":"awake","timestamp":"2024-01-13T03:10:07+00:00"},{"bpm":85,"source":"awake","timestamp":"2024-01-13T03:10:09+00:00"},{"bpm":85,"source":"awake","timestamp":"2024-01-13T03:13:56+00:00"},{"bpm":88,"source":"awake","timestamp":"2024-01-13T03:13:57+00:00"},{"bpm":85,"source":"awake","timestamp":"2024-01-13T03:14:42+00:00"},{"bpm":85,"source":"awake","timestamp":"2024-01-13T03:19:30+00:00"},{"bpm":83,"source":"awake","timestamp":"2024-01-13T03:19:39+00:00"},{"bpm":86,"source":"awake","timestamp":"2024-01-13T03:20:55+00:00"},{"bpm":85,"source":"awake","timestamp":"2024-01-13T03:24:42+00:00"},{"bpm":88,"source":"awake","timestamp":"2024-01-13T03:25:05+00:00"},{"bpm":86,"source":"awake","timestamp":"2024-01-13T03:25:58+00:00"},{"bpm":84,"source":"awake","timestamp":"2024-01-13T03:32:24+00:00"},{"bpm":86,"source":"awake","timestamp":"2024-01-13T03:32:31+00:00"},{"bpm":88,"source":"awake","timestamp":"2024-01-13T03:32:51+00:00"},{"bpm":87,"source":"awake","timestamp":"2024-01-13T03:37:12+00:00"},{"bpm":85,"source":"awake","timestamp":"2024-01-13T03:37:30+00:00"},{"bpm":89,"source":"awake","timestamp":"2024-01-13T03:38:33+00:00"},{"bpm":87,"source":"awake","timestamp":"2024-01-13T03:42:55+00:00"},{"bpm":89,"source":"awake","timestamp":"2024-01-13T03:42:57+00:00"},{"bpm":90,"source":"awake","timestamp":"2024-01-13T03:43:15+00:00"},{"bpm":87,"source":"awake","timestamp":"2024-01-13T03:47:38+00:00"},{"bpm":83,"source":"awake","timestamp":"2024-01-13T03:48:42+00:00"},{"bpm":85,"source":"awake","timestamp":"2024-01-13T03:48:44+00:00"},{"bpm":88,"source":"awake","timestamp":"2024-01-13T03:52:27+00:00"},{"bpm":86,"source":"awake","timestamp":"2024-01-13T03:52:32+00:00"},{"bpm":90,"source":"awake","timestamp":"2024-01-13T03:52:44+00:00"},{"bpm":98,"source":"awake","timestamp":"2024-01-13T04:01:44+00:00"},{"bpm":100,"source":"awake","timestamp":"2024-01-13T04:02:01+00:00"},{"bpm":97,"source":"awake","timestamp":"2024-01-13T04:02:04+00:00"},{"bpm":98,"source":"awake","timestamp":"2024-01-13T04:04:14+00:00"},{"bpm":100,"source":"awake","timestamp":"2024-01-13T04:04:20+00:00"},{"bpm":96,"source":"awake","timestamp":"2024-01-13T04:04:30+00:00"},{"bpm":96,"source":"awake","timestamp":"2024-01-13T04:08:54+00:00"},{"bpm":94,"source":"awake","timestamp":"2024-01-13T04:09:01+00:00"},{"bpm":99,"source":"awake","timestamp":"2024-01-13T04:09:26+00:00"},{"bpm":90,"source":"awake","timestamp":"2024-01-13T04:14:46+00:00"},{"bpm":92,"source":"awake","timestamp":"2024-01-13T04:14:48+00:00"},{"bpm":94,"source":"awake","timestamp":"2024-01-13T04:14:51+00:00"},{"bpm":91,"source":"awake","timestamp":"2024-01-13T04:16:25+00:00"},{"bpm":93,"source":"awake","timestamp":"2024-01-13T04:16:26+00:00"},{"bpm":89,"source":"awake","timestamp":"2024-01-13T04:16:50+00:00"},{"bpm":89,"source":"awake","timestamp":"2024-01-13T04:18:27+00:00"},{"bpm":88,"source":"awake","timestamp":"2024-01-13T04:18:33+00:00"},{"bpm":90,"source":"awake","timestamp":"2024-01-13T04:19:07+00:00"},{"bpm":92,"source":"awake","timestamp":"2024-01-13T04:20:57+00:00"},{"bpm":98,"source":"awake","timestamp":"2024-01-13T04:21:04+00:00"},{"bpm":96,"source":"awake","timestamp":"2024-01-13T04:21:06+00:00"},{"bpm":98,"source":"awake","timestamp":"2024-01-13T04:22:58+00:00"},{"bpm":95,"source":"awake","timestamp":"2024-01-13T04:23:13+00:00"},{"bpm":92,"source":"awake","timestamp":"2024-01-13T04:24:12+00:00"},{"bpm":92,"source":"awake","timestamp":"2024-01-13T04:28:42+00:00"},{"bpm":88,"source":"awake","timestamp":"2024-01-13T04:29:31+00:00"},{"bpm":90,"source":"awake","timestamp":"2024-01-13T04:29:41+00:00"},{"bpm":88,"source":"awake","timestamp":"2024-01-13T04:33:15+00:00"},{"bpm":85,"source":"awake","timestamp":"2024-01-13T04:33:57+00:00"},{"bpm":89,"source":"awake","timestamp":"2024-01-13T04:34:57+00:00"},{"bpm":91,"source":"awake","timestamp":"2024-01-13T04:38:30+00:00"},{"bpm":95,"source":"awake","timestamp":"2024-01-13T04:38:49+00:00"},{"bpm":88,"source":"awake","timestamp":"2024-01-13T04:39:36+00:00"},{"bpm":85,"source":"awake","timestamp":"2024-01-13T04:43:44+00:00"},{"bpm":83,"source":"awake","timestamp":"2024-01-13T04:44:13+00:00"},{"bpm":87,"source":"awake","timestamp":"2024-01-13T04:44:14+00:00"},{"bpm":91,"source":"awake","timestamp":"2024-01-13T04:54:49+00:00"},{"bpm":92,"source":"awake","timestamp":"2024-01-13T04:55:02+00:00"},{"bpm":88,"source":"awake","timestamp":"2024-01-13T04:55:03+00:00"},{"bpm":85,"source":"awake","timestamp":"2024-01-13T04:56:31+00:00"},{"bpm":85,"source":"awake","timestamp":"2024-01-13T04:56:33+00:00"},{"bpm":83,"source":"awake","timestamp":"2024-01-13T04:56:57+00:00"},{"bpm":90,"source":"awake","timestamp":"2024-01-13T04:59:02+00:00"},{"bpm":89,"source":"awake","timestamp":"2024-01-13T04:59:27+00:00"},{"bpm":87,"source":"awake","timestamp":"2024-01-13T05:00:00+00:00"},{"bpm":92,"source":"awake","timestamp":"2024-01-13T05:04:16+00:00"},{"bpm":94,"source":"awake","timestamp":"2024-01-13T05:04:25+00:00"},{"bpm":91,"source":"awake","timestamp":"2024-01-13T05:04:44+00:00"},{"bpm":92,"source":"awake","timestamp":"2024-01-13T05:06:50+00:00"},{"bpm":90,"source":"awake","timestamp":"2024-01-13T05:06:56+00:00"},{"bpm":94,"source":"awake","timestamp":"2024-01-13T05:07:11+00:00"},{"bpm":92,"source":"awake","timestamp":"2024-01-13T05:11:41+00:00"},{"bpm":94,"source":"awake","timestamp":"2024-01-13T05:11:50+00:00"},{"bpm":97,"source":"awake","timestamp":"2024-01-13T05:12:54+00:00"},{"bpm":101,"source":"awake","timestamp":"2024-01-13T05:38:28+00:00"},{"bpm":103,"source":"awake","timestamp":"2024-01-13T05:38:41+00:00"},{"bpm":115,"source":"awake","timestamp":"2024-01-13T05:38:44+00:00"},{"bpm":94,"source":"awake","timestamp":"2024-01-13T05:43:12+00:00"},{"bpm":96,"source":"awake","timestamp":"2024-01-13T05:43:21+00:00"},{"bpm":99,"source":"awake","timestamp":"2024-01-13T05:44:06+00:00"},{"bpm":99,"source":"awake","timestamp":"2024-01-13T05:48:32+00:00"},{"bpm":95,"source":"awake","timestamp":"2024-01-13T05:48:41+00:00"},{"bpm":97,"source":"awake","timestamp":"2024-01-13T05:49:40+00:00"}],"next_token":null}% 

Unsuccessful, with only dates

curl --location --request GET 'https://api.ouraring.com/v2/usercollection/heartrate?start_datetime=2024-01-12&end_datetime=2024-01-13' --header 'Authorization: Bearer MY_TOKEN' 
{"detail":[{"loc":["query","start_datetime"],"msg":"invalid datetime format","type":"value_error.datetime"},{"loc":["query","end_datetime"],"msg":"invalid datetime format","type":"value_error.datetime"}]}% 
curl --location --request GET 'https://api.ouraring.com/v2/usercollection/heartrate?start_date=2024-01-12&end_date=2024-01-13' --header 'Authorization: Bearer YZ5ZKIC53ZJXW4DTSNPQVHGNUCQ3BTX7' 
{"data":[],"next_token":null}%     

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.