{
  "openapi": "3.1.0",
  "info": {
    "title": "Oura API Documentation",
    "description": "# Overview \nThe Oura API allows Oura users and partner applications to improve their user experience with Oura data.\nThis document describes the Oura API Version 2 (V2), which is the only available integration point for Oura data. The previous V1 API has been sunset.\n# Getting Started \n## What is an API?\nAn API (Application Programming Interface) allows different software applications to communicate with each other. The Oura API enables you to access your Oura Ring data programmatically.\n## Quick Start Guide\n1. Register an [API Application](https://cloud.ouraring.com/oauth/applications) and implement OAuth2\n2. **Make Your First API Call**:\n   ```\n   curl -X GET https://api.ouraring.com/v2/usercollection/personal_info \\\n   -H \"Authorization: Bearer YOUR_TOKEN_HERE\"\n   ```\n3. **Explore Data Types**:\n   - Browse the available endpoints in this documentation to discover what data you can access\n   - Each endpoint includes example requests and responses\n4. **Set Up Webhooks (Strongly Recommended)**:\n   - Webhooks are the preferred way to consume Oura data\n   - We have not had customers hit rate limits with webhooks properly implemented\n   - Make a single request for historical data when a user first connects, then use webhooks for ongoing updates\n   - Webhook notifications come approximately 30 seconds after data syncs from the mobile app\n   - [Set up webhooks](#tag/Webhook-Subscription-Routes) to receive notifications when data changes\n## Common Questions\n- **Rate Limits**: The API is limited to 5000 requests per 5-minute period. You will almost certainly not have rate limit issues if webhooks are properly integrated into your system.\n- **Data Delay**: Different data types sync at different times - sleep data requires users to open the Oura app, while daily activity and stress may sync in the background\n# Data Access\nIn order to access data, a registered [API Application](https://cloud.ouraring.com/oauth/applications) is required.\n API Applications are limited to **10** users before requiring approval from Oura. There is no limit once an application is approved.\n Additionally, Oura users **must provide consent** to share each data type an API Application has access to.\nAll data access requests through the Oura API require [Authentication](https://cloud.ouraring.com/docs/authentication).\nAdditionally, we recommend that Oura users keep their mobile app updated to support API access for the latest data types.\n# Authentication\nThe Oura Cloud API supports authentication through the industry-standard OAuth2 protocol. For more information, see our [Authentication instructions](https://cloud.ouraring.com/docs/authentication).\nAccess tokens must be included in the request header as follows:\n```http\nGET /v2/usercollection/personal_info HTTP/1.1\nHost: api.ouraring.com\nAuthorization: Bearer <token>\n```\nPlease note that personal access tokens were deprecated in December 2025 and are no longer available for use.\n# Oura HTTP Response Codes\n| Response Code                        | Description |\n| ------------------------------------ | - |\n| 200 OK                               | Successful Response         |\n| 400 Query Parameter Validation Error | The request contains query parameters that are invalid or incorrectly formatted. |\n| 401 Unauthorized                     | Invalid or expired authentication token. |\n| 403 Forbidden                        | The requested resource requires additional permissions or the user's Oura subscription has expired. |\n| 429 Request Rate Limit Exceeded        | The API is rate limited to 5000 requests in a 5 minute period. You will receive a 429 error code if you exceed this limit. [Contact us](mailto:api-support@ouraring.com) if you expect your usage to exceed this limit.| ",
    "termsOfService": "https://cloud.ouraring.com/legal/api-agreement",
    "version": "2.0",
    "x-logo": {
      "url": "/v2/static/img/Oura_Logo-Developer_RBG_Black.svg"
    }
  },
  "servers": [
    {
      "url": "https://api.None",
      "description": "Oura API"
    }
  ],
  "paths": {
    "/v2/usercollection/personal_info": {
      "get": {
        "tags": [
          "Personal Info Routes"
        ],
        "summary": "Single Personal Info Document",
        "operationId": "Single_Personal_Info_Document_v2_usercollection_personal_info_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PersonalInfoResponse"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/personal_info' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/personal_info' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/personal_info', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/personal_info\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/tag": {
      "get": {
        "tags": [
          "Tag Routes"
        ],
        "summary": "Multiple Tag Documents",
        "operationId": "Multiple_tag_Documents_v2_usercollection_tag_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_TagModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/tag?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/tag' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/tag?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/tag?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/tag": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Multiple Tag Documents",
        "operationId": "Sandbox___Multiple_tag_Documents_v2_sandbox_usercollection_tag_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_TagModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/tag?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/tag' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/tag?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/tag?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/enhanced_tag": {
      "get": {
        "tags": [
          "Enhanced Tag Routes"
        ],
        "summary": "Multiple Enhanced Tag Documents",
        "operationId": "Multiple_enhanced_tag_Documents_v2_usercollection_enhanced_tag_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_EnhancedTagModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/enhanced_tag?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/enhanced_tag' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/enhanced_tag?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/enhanced_tag?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/enhanced_tag": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Multiple Enhanced Tag Documents",
        "operationId": "Sandbox___Multiple_enhanced_tag_Documents_v2_sandbox_usercollection_enhanced_tag_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_EnhancedTagModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/enhanced_tag?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/enhanced_tag' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/enhanced_tag?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/enhanced_tag?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/workout": {
      "get": {
        "tags": [
          "Workout Routes"
        ],
        "summary": "Multiple Workout Documents",
        "operationId": "Multiple_workout_Documents_v2_usercollection_workout_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_PublicWorkout_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/workout?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/workout' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/workout?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/workout?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/workout": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Multiple Workout Documents",
        "operationId": "Sandbox___Multiple_workout_Documents_v2_sandbox_usercollection_workout_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_PublicWorkout_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/workout?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/workout' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/workout?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/workout?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/session": {
      "get": {
        "tags": [
          "Session Routes"
        ],
        "summary": "Multiple Session Documents",
        "operationId": "Multiple_session_Documents_v2_usercollection_session_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_SessionModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/session?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/session' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/session?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/session?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/session": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Multiple Session Documents",
        "operationId": "Sandbox___Multiple_session_Documents_v2_sandbox_usercollection_session_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_SessionModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/session?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/session' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/session?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/session?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/daily_activity": {
      "get": {
        "tags": [
          "Daily Activity Routes"
        ],
        "summary": "Multiple Daily Activity Documents",
        "operationId": "Multiple_daily_activity_Documents_v2_usercollection_daily_activity_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_DailyActivityModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/daily_activity?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/daily_activity' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/daily_activity?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/daily_activity?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/daily_activity": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Multiple Daily Activity Documents",
        "operationId": "Sandbox___Multiple_daily_activity_Documents_v2_sandbox_usercollection_daily_activity_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_DailyActivityModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/daily_activity?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/daily_activity' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/daily_activity?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/daily_activity?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/daily_sleep": {
      "get": {
        "tags": [
          "Daily Sleep Routes"
        ],
        "summary": "Multiple Daily Sleep Documents",
        "operationId": "Multiple_daily_sleep_Documents_v2_usercollection_daily_sleep_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_DailySleepModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/daily_sleep?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/daily_sleep' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/daily_sleep?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/daily_sleep?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/daily_sleep": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Multiple Daily Sleep Documents",
        "operationId": "Sandbox___Multiple_daily_sleep_Documents_v2_sandbox_usercollection_daily_sleep_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_DailySleepModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/daily_sleep?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/daily_sleep' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/daily_sleep?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/daily_sleep?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/daily_spo2": {
      "get": {
        "tags": [
          "Daily Spo2 Routes"
        ],
        "summary": "Multiple Daily Spo2 Documents",
        "operationId": "Multiple_daily_spo2_Documents_v2_usercollection_daily_spo2_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_DailySpO2Model_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/daily_spo2?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/daily_spo2' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/daily_spo2?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/daily_spo2?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/daily_spo2": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Multiple Daily Spo2 Documents",
        "operationId": "Sandbox___Multiple_daily_spo2_Documents_v2_sandbox_usercollection_daily_spo2_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_DailySpO2Model_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/daily_spo2?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/daily_spo2' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/daily_spo2?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/daily_spo2?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/daily_readiness": {
      "get": {
        "tags": [
          "Daily Readiness Routes"
        ],
        "summary": "Multiple Daily Readiness Documents",
        "operationId": "Multiple_daily_readiness_Documents_v2_usercollection_daily_readiness_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_DailyReadinessModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/daily_readiness?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/daily_readiness' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/daily_readiness?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/daily_readiness?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/daily_readiness": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Multiple Daily Readiness Documents",
        "operationId": "Sandbox___Multiple_daily_readiness_Documents_v2_sandbox_usercollection_daily_readiness_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_DailyReadinessModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/daily_readiness?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/daily_readiness' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/daily_readiness?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/daily_readiness?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/sleep": {
      "get": {
        "tags": [
          "Sleep Routes"
        ],
        "summary": "Multiple Sleep Documents",
        "operationId": "Multiple_sleep_Documents_v2_usercollection_sleep_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_SleepModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/sleep?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/sleep' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/sleep?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/sleep?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/sleep": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Multiple Sleep Documents",
        "operationId": "Sandbox___Multiple_sleep_Documents_v2_sandbox_usercollection_sleep_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_SleepModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/sleep?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/sleep' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/sleep?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/sleep?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/sleep_time": {
      "get": {
        "tags": [
          "Sleep Time Routes"
        ],
        "summary": "Multiple Sleep Time Documents",
        "operationId": "Multiple_sleep_time_Documents_v2_usercollection_sleep_time_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_SleepTimeModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/sleep_time?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/sleep_time' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/sleep_time?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/sleep_time?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/sleep_time": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Multiple Sleep Time Documents",
        "operationId": "Sandbox___Multiple_sleep_time_Documents_v2_sandbox_usercollection_sleep_time_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_SleepTimeModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/sleep_time?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/sleep_time' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/sleep_time?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/sleep_time?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/rest_mode_period": {
      "get": {
        "tags": [
          "Rest Mode Period Routes"
        ],
        "summary": "Multiple Rest Mode Period Documents",
        "operationId": "Multiple_rest_mode_period_Documents_v2_usercollection_rest_mode_period_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_RestModePeriodModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/rest_mode_period?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/rest_mode_period' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/rest_mode_period?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/rest_mode_period?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/rest_mode_period": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Multiple Rest Mode Period Documents",
        "operationId": "Sandbox___Multiple_rest_mode_period_Documents_v2_sandbox_usercollection_rest_mode_period_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_RestModePeriodModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/rest_mode_period?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/rest_mode_period' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/rest_mode_period?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/rest_mode_period?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/ring_configuration": {
      "get": {
        "tags": [
          "Ring Configuration Routes"
        ],
        "summary": "Multiple Ring Configuration Documents",
        "operationId": "Multiple_ring_configuration_Documents_v2_usercollection_ring_configuration_get",
        "parameters": [
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_RingConfigurationModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/ring_configuration' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/ring_configuration' \nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/ring_configuration', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/ring_configuration\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/ring_configuration": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Multiple Ring Configuration Documents",
        "operationId": "Sandbox___Multiple_ring_configuration_Documents_v2_sandbox_usercollection_ring_configuration_get",
        "parameters": [
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_RingConfigurationModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/ring_configuration' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/ring_configuration' \nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/ring_configuration', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/ring_configuration\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/daily_stress": {
      "get": {
        "tags": [
          "Daily Stress Routes"
        ],
        "summary": "Multiple Daily Stress Documents",
        "operationId": "Multiple_daily_stress_Documents_v2_usercollection_daily_stress_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_DailyStressModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/daily_stress?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/daily_stress' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/daily_stress?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/daily_stress?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/daily_stress": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Multiple Daily Stress Documents",
        "operationId": "Sandbox___Multiple_daily_stress_Documents_v2_sandbox_usercollection_daily_stress_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_DailyStressModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/daily_stress?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/daily_stress' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/daily_stress?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/daily_stress?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/daily_resilience": {
      "get": {
        "tags": [
          "Daily Resilience Routes"
        ],
        "summary": "Multiple Daily Resilience Documents",
        "operationId": "Multiple_daily_resilience_Documents_v2_usercollection_daily_resilience_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_DailyResilienceModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/daily_resilience?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/daily_resilience' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/daily_resilience?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/daily_resilience?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/daily_resilience": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Multiple Daily Resilience Documents",
        "operationId": "Sandbox___Multiple_daily_resilience_Documents_v2_sandbox_usercollection_daily_resilience_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_DailyResilienceModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/daily_resilience?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/daily_resilience' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/daily_resilience?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/daily_resilience?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/daily_cardiovascular_age": {
      "get": {
        "tags": [
          "Daily Cardiovascular Age Routes"
        ],
        "summary": "Multiple Daily Cardiovascular Age Documents",
        "operationId": "Multiple_daily_cardiovascular_age_Documents_v2_usercollection_daily_cardiovascular_age_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_DailyCardiovascularAgeModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/daily_cardiovascular_age?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/daily_cardiovascular_age' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/daily_cardiovascular_age?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/daily_cardiovascular_age?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/daily_cardiovascular_age": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Multiple Daily Cardiovascular Age Documents",
        "operationId": "Sandbox___Multiple_daily_cardiovascular_age_Documents_v2_sandbox_usercollection_daily_cardiovascular_age_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_DailyCardiovascularAgeModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/daily_cardiovascular_age?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/daily_cardiovascular_age' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/daily_cardiovascular_age?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/daily_cardiovascular_age?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/vO2_max": {
      "get": {
        "tags": [
          "VO2 Max Routes"
        ],
        "summary": "Multiple Vo2 Max Documents",
        "operationId": "Multiple_vO2_max_Documents_v2_usercollection_vO2_max_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_VO2MaxModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/vO2_max?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/vO2_max' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/vO2_max?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/vO2_max?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/vO2_max": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Multiple Vo2 Max Documents",
        "operationId": "Sandbox___Multiple_vO2_max_Documents_v2_sandbox_usercollection_vO2_max_get",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Date"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiDocumentResponse_VO2MaxModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/vO2_max?start_date=2021-11-01&end_date=2021-12-01' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/vO2_max' \nparams={ \n    'start_date': '2021-11-01', \n    'end_date': '2021-12-01' \n}\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/vO2_max?start_date=2021-11-01&end_date=2021-12-01', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/vO2_max?start_date=2021-11-01&end_date=2021-12-01\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/tag/{document_id}": {
      "get": {
        "tags": [
          "Tag Routes"
        ],
        "summary": "Single Tag Document",
        "operationId": "Single_tag_Document_v2_usercollection_tag__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/tag/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/tag/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/tag/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/tag/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/tag/{document_id}": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Single Tag Document",
        "operationId": "Sandbox___Single_tag_Document_v2_sandbox_usercollection_tag__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/tag/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/tag/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/tag/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/tag/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/enhanced_tag/{document_id}": {
      "get": {
        "tags": [
          "Enhanced Tag Routes"
        ],
        "summary": "Single Enhanced Tag Document",
        "operationId": "Single_enhanced_tag_Document_v2_usercollection_enhanced_tag__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EnhancedTagModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/enhanced_tag/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/enhanced_tag/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/enhanced_tag/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/enhanced_tag/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/enhanced_tag/{document_id}": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Single Enhanced Tag Document",
        "operationId": "Sandbox___Single_enhanced_tag_Document_v2_sandbox_usercollection_enhanced_tag__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EnhancedTagModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/enhanced_tag/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/enhanced_tag/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/enhanced_tag/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/enhanced_tag/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/workout/{document_id}": {
      "get": {
        "tags": [
          "Workout Routes"
        ],
        "summary": "Single Workout Document",
        "operationId": "Single_workout_Document_v2_usercollection_workout__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicWorkout"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/workout/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/workout/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/workout/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/workout/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/workout/{document_id}": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Single Workout Document",
        "operationId": "Sandbox___Single_workout_Document_v2_sandbox_usercollection_workout__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicWorkout"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/workout/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/workout/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/workout/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/workout/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/session/{document_id}": {
      "get": {
        "tags": [
          "Session Routes"
        ],
        "summary": "Single Session Document",
        "operationId": "Single_session_Document_v2_usercollection_session__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/session/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/session/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/session/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/session/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/session/{document_id}": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Single Session Document",
        "operationId": "Sandbox___Single_session_Document_v2_sandbox_usercollection_session__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/session/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/session/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/session/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/session/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/daily_activity/{document_id}": {
      "get": {
        "tags": [
          "Daily Activity Routes"
        ],
        "summary": "Single Daily Activity Document",
        "operationId": "Single_daily_activity_Document_v2_usercollection_daily_activity__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DailyActivityModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/daily_activity/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/daily_activity/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/daily_activity/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/daily_activity/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/daily_activity/{document_id}": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Single Daily Activity Document",
        "operationId": "Sandbox___Single_daily_activity_Document_v2_sandbox_usercollection_daily_activity__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DailyActivityModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/daily_activity/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/daily_activity/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/daily_activity/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/daily_activity/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/daily_sleep/{document_id}": {
      "get": {
        "tags": [
          "Daily Sleep Routes"
        ],
        "summary": "Single Daily Sleep Document",
        "operationId": "Single_daily_sleep_Document_v2_usercollection_daily_sleep__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DailySleepModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/daily_sleep/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/daily_sleep/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/daily_sleep/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/daily_sleep/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/daily_sleep/{document_id}": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Single Daily Sleep Document",
        "operationId": "Sandbox___Single_daily_sleep_Document_v2_sandbox_usercollection_daily_sleep__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DailySleepModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/daily_sleep/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/daily_sleep/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/daily_sleep/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/daily_sleep/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/daily_spo2/{document_id}": {
      "get": {
        "tags": [
          "Daily Spo2 Routes"
        ],
        "summary": "Single Daily Spo2 Document",
        "operationId": "Single_daily_spo2_Document_v2_usercollection_daily_spo2__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DailySpO2Model"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/daily_spo2/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/daily_spo2/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/daily_spo2/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/daily_spo2/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/daily_spo2/{document_id}": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Single Daily Spo2 Document",
        "operationId": "Sandbox___Single_daily_spo2_Document_v2_sandbox_usercollection_daily_spo2__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DailySpO2Model"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/daily_spo2/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/daily_spo2/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/daily_spo2/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/daily_spo2/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/daily_readiness/{document_id}": {
      "get": {
        "tags": [
          "Daily Readiness Routes"
        ],
        "summary": "Single Daily Readiness Document",
        "operationId": "Single_daily_readiness_Document_v2_usercollection_daily_readiness__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DailyReadinessModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/daily_readiness/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/daily_readiness/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/daily_readiness/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/daily_readiness/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/daily_readiness/{document_id}": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Single Daily Readiness Document",
        "operationId": "Sandbox___Single_daily_readiness_Document_v2_sandbox_usercollection_daily_readiness__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DailyReadinessModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/daily_readiness/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/daily_readiness/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/daily_readiness/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/daily_readiness/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/sleep/{document_id}": {
      "get": {
        "tags": [
          "Sleep Routes"
        ],
        "summary": "Single Sleep Document",
        "operationId": "Single_sleep_Document_v2_usercollection_sleep__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SleepModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/sleep/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/sleep/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/sleep/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/sleep/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/sleep/{document_id}": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Single Sleep Document",
        "operationId": "Sandbox___Single_sleep_Document_v2_sandbox_usercollection_sleep__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SleepModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/sleep/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/sleep/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/sleep/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/sleep/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/sleep_time/{document_id}": {
      "get": {
        "tags": [
          "Sleep Time Routes"
        ],
        "summary": "Single Sleep Time Document",
        "operationId": "Single_sleep_time_Document_v2_usercollection_sleep_time__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SleepTimeModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/sleep_time/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/sleep_time/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/sleep_time/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/sleep_time/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/sleep_time/{document_id}": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Single Sleep Time Document",
        "operationId": "Sandbox___Single_sleep_time_Document_v2_sandbox_usercollection_sleep_time__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SleepTimeModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/sleep_time/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/sleep_time/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/sleep_time/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/sleep_time/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/rest_mode_period/{document_id}": {
      "get": {
        "tags": [
          "Rest Mode Period Routes"
        ],
        "summary": "Single Rest Mode Period Document",
        "operationId": "Single_rest_mode_period_Document_v2_usercollection_rest_mode_period__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RestModePeriodModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/rest_mode_period/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/rest_mode_period/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/rest_mode_period/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/rest_mode_period/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/rest_mode_period/{document_id}": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Single Rest Mode Period Document",
        "operationId": "Sandbox___Single_rest_mode_period_Document_v2_sandbox_usercollection_rest_mode_period__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RestModePeriodModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/rest_mode_period/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/rest_mode_period/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/rest_mode_period/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/rest_mode_period/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/ring_configuration/{document_id}": {
      "get": {
        "tags": [
          "Ring Configuration Routes"
        ],
        "summary": "Single Ring Configuration Document",
        "operationId": "Single_ring_configuration_Document_v2_usercollection_ring_configuration__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RingConfigurationModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/ring_configuration/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/ring_configuration/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/ring_configuration/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/ring_configuration/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/ring_configuration/{document_id}": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Single Ring Configuration Document",
        "operationId": "Sandbox___Single_ring_configuration_Document_v2_sandbox_usercollection_ring_configuration__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RingConfigurationModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/ring_configuration/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/ring_configuration/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/ring_configuration/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/ring_configuration/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/daily_stress/{document_id}": {
      "get": {
        "tags": [
          "Daily Stress Routes"
        ],
        "summary": "Single Daily Stress Document",
        "operationId": "Single_daily_stress_Document_v2_usercollection_daily_stress__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DailyStressModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/daily_stress/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/daily_stress/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/daily_stress/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/daily_stress/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/daily_stress/{document_id}": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Single Daily Stress Document",
        "operationId": "Sandbox___Single_daily_stress_Document_v2_sandbox_usercollection_daily_stress__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DailyStressModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/daily_stress/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/daily_stress/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/daily_stress/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/daily_stress/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/daily_resilience/{document_id}": {
      "get": {
        "tags": [
          "Daily Resilience Routes"
        ],
        "summary": "Single Daily Resilience Document",
        "operationId": "Single_daily_resilience_Document_v2_usercollection_daily_resilience__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DailyResilienceModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/daily_resilience/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/daily_resilience/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/daily_resilience/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/daily_resilience/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/daily_resilience/{document_id}": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Single Daily Resilience Document",
        "operationId": "Sandbox___Single_daily_resilience_Document_v2_sandbox_usercollection_daily_resilience__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DailyResilienceModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/daily_resilience/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/daily_resilience/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/daily_resilience/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/daily_resilience/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/daily_cardiovascular_age/{document_id}": {
      "get": {
        "tags": [
          "Daily Cardiovascular Age Routes"
        ],
        "summary": "Single Daily Cardiovascular Age Document",
        "operationId": "Single_daily_cardiovascular_age_Document_v2_usercollection_daily_cardiovascular_age__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DailyCardiovascularAgeModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/daily_cardiovascular_age/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/daily_cardiovascular_age/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/daily_cardiovascular_age/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/daily_cardiovascular_age/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/daily_cardiovascular_age/{document_id}": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Single Daily Cardiovascular Age Document",
        "operationId": "Sandbox___Single_daily_cardiovascular_age_Document_v2_sandbox_usercollection_daily_cardiovascular_age__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DailyCardiovascularAgeModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/daily_cardiovascular_age/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/daily_cardiovascular_age/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/daily_cardiovascular_age/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/daily_cardiovascular_age/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/usercollection/vO2_max/{document_id}": {
      "get": {
        "tags": [
          "VO2 Max Routes"
        ],
        "summary": "Single Vo2 Max Document",
        "operationId": "Single_vO2_max_Document_v2_usercollection_vO2_max__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VO2MaxModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/usercollection/vO2_max/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/vO2_max/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/vO2_max/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/vO2_max/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/vO2_max/{document_id}": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Single Vo2 Max Document",
        "operationId": "Sandbox___Single_vO2_max_Document_v2_sandbox_usercollection_vO2_max__document_id__get",
        "parameters": [
          {
            "name": "document_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Document Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VO2MaxModel"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/vO2_max/2-5daccc095220cc5493a4e9c2b681ca941e' \\\n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/vO2_max/2-5daccc095220cc5493a4e9c2b681ca941e\nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/vO2_max/2-5daccc095220cc5493a4e9c2b681ca941e', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/vO2_max/2-5daccc095220cc5493a4e9c2b681ca941e\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/webhook/subscription": {
      "get": {
        "tags": [
          "Webhook Subscription Routes"
        ],
        "summary": "List Webhook Subscriptions",
        "operationId": "list_webhook_subscriptions_v2_webhook_subscription_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/WebhookSubscriptionModel"
                  },
                  "type": "array",
                  "title": "Response List Webhook Subscriptions V2 Webhook Subscription Get"
                }
              }
            }
          }
        },
        "security": [
          {
            "ClientIdAuth": [],
            "ClientSecretAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/webhook/subscription' --header 'x-client-id: client-id' --header 'x-client-secret: client-secret'"
          }
        ]
      },
      "post": {
        "tags": [
          "Webhook Subscription Routes"
        ],
        "summary": "Create Webhook Subscription",
        "operationId": "create_webhook_subscription_v2_webhook_subscription_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateWebhookSubscriptionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookSubscriptionModel"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "ClientIdAuth": [],
            "ClientSecretAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request POST 'https://api.ouraring.com/v2/webhook/subscription' --header 'x-client-id: client-id' --header 'x-client-secret: client-secret' --header 'Content-Type: application/json' --data-raw '{\n    \"callback_url\": \"https://my-api/oura/tag/delete\",\n    \"verification_token\": \"123\",\n    \"event_type\": \"delete\",\n    \"data_type\": \"tag\"\n}'"
          }
        ]
      }
    },
    "/v2/webhook/subscription/{id}": {
      "get": {
        "tags": [
          "Webhook Subscription Routes"
        ],
        "summary": "Get Webhook Subscription",
        "operationId": "get_webhook_subscription_v2_webhook_subscription__id__get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookSubscriptionModel"
                }
              }
            }
          },
          "403": {
            "description": "Webhook with specified id does not exist."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "ClientIdAuth": [],
            "ClientSecretAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request GET 'https://api.ouraring.com/v2/webhook/subscription/5d3fe17b-f880-4d93-b9b6-afbfb76c1e78' --header 'x-client-id: client-id' --header 'x-client-secret: client-secret'"
          }
        ]
      },
      "put": {
        "tags": [
          "Webhook Subscription Routes"
        ],
        "summary": "Update Webhook Subscription",
        "operationId": "update_webhook_subscription_v2_webhook_subscription__id__put",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateWebhookSubscriptionRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookSubscriptionModel"
                }
              }
            }
          },
          "403": {
            "description": "Webhook with specified id does not exist."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "ClientIdAuth": [],
            "ClientSecretAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request PUT 'https://api.ouraring.com/v2/webhook/subscription/5d3fe17b-f880-4d93-b9b6-afbfb76c1e78' --header 'x-client-id: client-id' --header 'x-client-secret: client-secret' --header 'Content-Type: application/json' --data-raw '{\n    \"callback_url\": \"https://my-api/oura/tag/delete\",\n    \"verification_token\": \"123\",\n    \"event_type\": \"delete\",\n    \"data_type\": \"tag\"\n}'"
          }
        ]
      },
      "delete": {
        "tags": [
          "Webhook Subscription Routes"
        ],
        "summary": "Delete Webhook Subscription",
        "operationId": "delete_webhook_subscription_v2_webhook_subscription__id__delete",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Id"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "403": {
            "description": "Webhook with specified id does not exist."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "ClientIdAuth": [],
            "ClientSecretAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request DELETE 'https://api.ouraring.com/v2/webhook/subscription/5d3fe17b-f880-4d93-b9b6-afbfb76c1e78' --header 'x-client-id: client-id' --header 'x-client-secret: client-secret'"
          }
        ]
      }
    },
    "/v2/webhook/subscription/renew/{id}": {
      "put": {
        "tags": [
          "Webhook Subscription Routes"
        ],
        "summary": "Renew Webhook Subscription",
        "operationId": "renew_webhook_subscription_v2_webhook_subscription_renew__id__put",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookSubscriptionModel"
                }
              }
            }
          },
          "403": {
            "description": "Webhook with specified id does not exist."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "ClientIdAuth": [],
            "ClientSecretAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "curl --location --request PUT 'https://api.ouraring.com/v2/webhook/subscription/renew/5d3fe17b-f880-4d93-b9b6-afbfb76c1e78' --header 'x-client-id: client-id' --header 'x-client-secret: client-secret' --header 'Content-Type: application/json'"
          }
        ]
      }
    },
    "/v2/usercollection/heartrate": {
      "get": {
        "tags": [
          "Heart Rate Routes"
        ],
        "summary": "Multiple Heart Rate Documents",
        "operationId": "Multiple_Heart_Rate_Documents_v2_usercollection_heartrate_get",
        "parameters": [
          {
            "name": "start_datetime",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Datetime"
            }
          },
          {
            "name": "end_datetime",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Datetime"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeSeriesResponse_HeartRateModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "# The '+' symbol in the timezone must be escaped to `%2B` if included. \ncurl --location --request GET 'https://api.ouraring.com/v2/usercollection/heartrate?start_datetime=2021-11-01T00:00:00-08:00&end_datetime=2021-12-01T00:00:00-08:00' \\ \n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/usercollection/heartrate' \nparams={ \n    'start_datetime': '2021-11-01T00:00:00-08:00', \n    'end_datetime': '2021-12-01T00:00:00-08:00' \n} \nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/usercollection/heartrate?start_datetime=2021-11-01T00:00:00-08:00&end_datetime=2021-12-01T00:00:00-08:00', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/usercollection/heartrate?start_datetime=2021-11-01T00:00:00-08:00&end_datetime=2021-12-01T00:00:00-08:00\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    },
    "/v2/sandbox/usercollection/heartrate": {
      "get": {
        "tags": [
          "Sandbox Routes"
        ],
        "summary": "Sandbox - Multiple Heartrate Documents",
        "operationId": "Sandbox___Multiple_heartrate_Documents_v2_sandbox_usercollection_heartrate_get",
        "parameters": [
          {
            "name": "start_datetime",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start Datetime"
            }
          },
          {
            "name": "end_datetime",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "End Datetime"
            }
          },
          {
            "name": "next_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Next Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeSeriesResponse_HeartRateModel_"
                }
              }
            }
          },
          "400": {
            "description": "Client Exception"
          },
          "401": {
            "description": "Unauthorized access exception. Usually means the access token is expired, malformed or revoked."
          },
          "403": {
            "description": "Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Request Rate Limit Exceeded."
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth2": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "cURL",
            "label": "cURL",
            "source": "# The '+' symbol in the timezone must be escaped to `%2B` if included. \ncurl --location --request GET 'https://api.ouraring.com/v2/sandbox/usercollection/heartrate?start_datetime=2021-11-01T00:00:00-08:00&end_datetime=2021-12-01T00:00:00-08:00' \\ \n--header 'Authorization: Bearer <token>'"
          },
          {
            "lang": "Python",
            "source": "import requests \nurl = 'https://api.ouraring.com/v2/sandbox/usercollection/heartrate' \nparams={ \n    'start_datetime': '2021-11-01T00:00:00-08:00', \n    'end_datetime': '2021-12-01T00:00:00-08:00' \n} \nheaders = { \n  'Authorization': 'Bearer <token>' \n}\nresponse = requests.request('GET', url, headers=headers, params=params) \nprint(response.text)",
            "label": "Python"
          },
          {
            "lang": "JavaScript",
            "source": "var myHeaders = new Headers(); \nmyHeaders.append('Authorization', 'Bearer <token>'); \nvar requestOptions = { \n  method: 'GET', \n  headers: myHeaders, \nfetch('https://api.ouraring.com/v2/sandbox/usercollection/heartrate?start_datetime=2021-11-01T00:00:00-08:00&end_datetime=2021-12-01T00:00:00-08:00', requestOptions) \n  .then(response => response.text()) \n  .then(result => console.log(result)) \n  .catch(error => console.log('error', error));",
            "label": "JavaScript"
          },
          {
            "lang": "Java",
            "source": "OkHttpClient client = new OkHttpClient().newBuilder() \n  .build(); \nRequest request = new Request.Builder() \n  .url(\"https://api.ouraring.com/v2/sandbox/usercollection/heartrate?start_datetime=2021-11-01T00:00:00-08:00&end_datetime=2021-12-01T00:00:00-08:00\") \n  .method(\"GET\", null) \n  .addHeader(\"Authorization\", \"Bearer <token>\") \n  .build(); \nResponse response = client.newCall(request).execute();",
            "label": "Java"
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "ActivityContributors": {
        "properties": {
          "meet_daily_targets": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "",
            "description": "Contribution of meeting previous 7-day daily activity targets in range [1, 100]."
          },
          "move_every_hour": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "",
            "description": "Contribution of previous 24-hour inactivity alerts in range [1, 100]."
          },
          "recovery_time": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "",
            "description": "Contribution of previous 7-day recovery time in range [1, 100]."
          },
          "stay_active": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "",
            "description": "Contribution of previous 24-hour activity in range [1, 100]."
          },
          "training_frequency": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "",
            "description": "Contribution of previous 7-day exercise frequency in range [1, 100]."
          },
          "training_volume": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "",
            "description": "Contribution of previous 7-day exercise volume in range [1, 100]."
          }
        },
        "type": "object",
        "title": "ActivityContributors",
        "description": "Object defining activity score contributors."
      },
      "CreateWebhookSubscriptionRequest": {
        "properties": {
          "callback_url": {
            "type": "string",
            "title": "Callback Url"
          },
          "verification_token": {
            "type": "string",
            "title": "Verification Token"
          },
          "event_type": {
            "$ref": "#/components/schemas/WebhookOperation"
          },
          "data_type": {
            "$ref": "#/components/schemas/ExtApiV2DataType"
          }
        },
        "type": "object",
        "required": [
          "callback_url",
          "verification_token",
          "event_type",
          "data_type"
        ],
        "title": "CreateWebhookSubscriptionRequest"
      },
      "DailyActivityModel": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "class_5_min": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Class 5 Min",
            "description": "5-minute activity classification for the activity period:\n* ```0```\tnon wear\n* ```1``` rest\n* ```2``` inactive\n* ```3``` low activity\n* ```4``` medium activity\n* ```5``` high activity"
          },
          "score": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Score",
            "description": "Activity score in range ```[1, 100]```"
          },
          "active_calories": {
            "type": "integer",
            "title": "Active Calories",
            "description": "Active calories expended (in kilocalories)"
          },
          "average_met_minutes": {
            "type": "number",
            "title": "Average Met Minutes",
            "description": "Average metabolic equivalent (MET) in minutes"
          },
          "contributors": {
            "$ref": "#/components/schemas/ActivityContributors"
          },
          "equivalent_walking_distance": {
            "type": "integer",
            "title": "Equivalent Walking Distance",
            "description": "Equivalent walking distance (in meters) of energy expenditure"
          },
          "high_activity_met_minutes": {
            "type": "integer",
            "title": "High Activity Met Minutes",
            "description": "High activity metabolic equivalent (MET) in minutes"
          },
          "high_activity_time": {
            "type": "integer",
            "title": "High Activity Time",
            "description": "High activity metabolic equivalent (MET) in seconds"
          },
          "inactivity_alerts": {
            "type": "integer",
            "title": "Inactivity Alerts",
            "description": "Number of inactivity alerts received"
          },
          "low_activity_met_minutes": {
            "type": "integer",
            "title": "Low Activity Met Minutes",
            "description": "Low activity metabolic equivalent (MET) in minutes"
          },
          "low_activity_time": {
            "type": "integer",
            "title": "Low Activity Time",
            "description": "Low activity metabolic equivalent (MET) in seconds"
          },
          "medium_activity_met_minutes": {
            "type": "integer",
            "title": "Medium Activity Met Minutes",
            "description": "Medium activity metabolic equivalent (MET) in minutes"
          },
          "medium_activity_time": {
            "type": "integer",
            "title": "Medium Activity Time",
            "description": "Medium activity metabolic equivalent (MET) in seconds"
          },
          "met": {
            "$ref": "#/components/schemas/SampleModel"
          },
          "meters_to_target": {
            "type": "integer",
            "title": "Meters To Target",
            "description": "Remaining meters to target (from ```target_meters```"
          },
          "non_wear_time": {
            "type": "integer",
            "title": "Non Wear Time",
            "description": "The time (in seconds) in which the ring was not worn"
          },
          "resting_time": {
            "type": "integer",
            "title": "Resting Time",
            "description": "Resting time (in seconds)"
          },
          "sedentary_met_minutes": {
            "type": "integer",
            "title": "Sedentary Met Minutes",
            "description": "Sedentary metabolic equivalent (MET) in minutes"
          },
          "sedentary_time": {
            "type": "integer",
            "title": "Sedentary Time",
            "description": "Sedentary metabolic equivalent (MET) in seconds"
          },
          "steps": {
            "type": "integer",
            "title": "Steps",
            "description": "Total number of steps taken"
          },
          "target_calories": {
            "type": "integer",
            "title": "Target Calories",
            "description": "Daily activity target (in kilocalories)"
          },
          "target_meters": {
            "type": "integer",
            "title": "Target Meters",
            "description": "Daily activity target (in meters)"
          },
          "total_calories": {
            "type": "integer",
            "title": "Total Calories",
            "description": "Total calories expended (in kilocalories)"
          },
          "day": {
            "type": "string",
            "format": "date",
            "title": "Day",
            "description": "The ```YYYY-MM-DD``` formatted local date indicating when the daily activity occurred"
          },
          "timestamp": {
            "$ref": "#/components/schemas/LocalDateTime",
            "description": "ISO 8601 formatted local timestamp indicating the start datetime of when the daily activity occurred"
          }
        },
        "type": "object",
        "required": [
          "id",
          "class_5_min",
          "score",
          "active_calories",
          "average_met_minutes",
          "contributors",
          "equivalent_walking_distance",
          "high_activity_met_minutes",
          "high_activity_time",
          "inactivity_alerts",
          "low_activity_met_minutes",
          "low_activity_time",
          "medium_activity_met_minutes",
          "medium_activity_time",
          "met",
          "meters_to_target",
          "non_wear_time",
          "resting_time",
          "sedentary_met_minutes",
          "sedentary_time",
          "steps",
          "target_calories",
          "target_meters",
          "total_calories",
          "day",
          "timestamp"
        ],
        "title": "DailyActivityModel"
      },
      "DailyCardiovascularAgeModel": {
        "properties": {
          "day": {
            "type": "string",
            "format": "date",
            "title": "Day"
          },
          "vascular_age": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Vascular Age",
            "description": "'Predicted vascular age in range [18, 100]."
          }
        },
        "type": "object",
        "required": [
          "day",
          "vascular_age"
        ],
        "title": "DailyCardiovascularAgeModel"
      },
      "DailyReadinessModel": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "contributors": {
            "$ref": "#/components/schemas/ReadinessContributors",
            "description": "Contributors of the daily readiness score."
          },
          "day": {
            "type": "string",
            "format": "date",
            "title": "Day",
            "description": "Day that the daily readiness belongs to."
          },
          "score": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Score",
            "description": "Daily readiness score."
          },
          "temperature_deviation": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Temperature Deviation",
            "description": "Temperature deviation in degrees Celsius."
          },
          "temperature_trend_deviation": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Temperature Trend Deviation",
            "description": "Temperature trend deviation in degrees Celsius."
          },
          "timestamp": {
            "$ref": "#/components/schemas/LocalDateTime",
            "description": "Timestamp of the daily readiness."
          }
        },
        "type": "object",
        "required": [
          "id",
          "contributors",
          "day",
          "score",
          "temperature_deviation",
          "temperature_trend_deviation",
          "timestamp"
        ],
        "title": "DailyReadinessModel"
      },
      "DailyResilienceModel": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "day": {
            "type": "string",
            "format": "date",
            "title": "Day",
            "description": "Day when the resilience record was recorded."
          },
          "contributors": {
            "$ref": "#/components/schemas/ResilienceContributors",
            "description": "Contributors to the resilience score."
          },
          "level": {
            "$ref": "#/components/schemas/LongTermResilienceLevel",
            "description": "Resilience level."
          }
        },
        "type": "object",
        "required": [
          "id",
          "day",
          "contributors",
          "level"
        ],
        "title": "DailyResilienceModel"
      },
      "DailySleepModel": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "contributors": {
            "$ref": "#/components/schemas/SleepContributors",
            "description": "Contributors for the daily sleep score."
          },
          "day": {
            "type": "string",
            "format": "date",
            "title": "Day",
            "description": "Day that the daily sleep belongs to."
          },
          "score": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Score",
            "description": "Daily sleep score."
          },
          "timestamp": {
            "$ref": "#/components/schemas/LocalDateTime",
            "description": "Timestamp of the daily sleep."
          }
        },
        "type": "object",
        "required": [
          "id",
          "contributors",
          "day",
          "score",
          "timestamp"
        ],
        "title": "DailySleepModel",
        "description": "Object defining daily sleep."
      },
      "DailySpO2AggregatedValuesModel": {
        "properties": {
          "average": {
            "type": "number",
            "title": "Average",
            "description": "Average oxygen saturation (SpO2) throughout the night."
          }
        },
        "type": "object",
        "required": [
          "average"
        ],
        "title": "DailySpO2AggregatedValuesModel"
      },
      "DailySpO2Model": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "day": {
            "type": "string",
            "format": "date",
            "title": "Day"
          },
          "spo2_percentage": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DailySpO2AggregatedValuesModel"
              },
              {
                "type": "null"
              }
            ],
            "description": "The SpO2 percentage value aggregated over a single day."
          },
          "breathing_disturbance_index": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Breathing Disturbance Index",
            "description": "Breathing Disturbance Index (BDI) calculated using detected SpO2 drops from timeseries. Values should be in range [0, 100]"
          }
        },
        "type": "object",
        "required": [
          "id",
          "day",
          "spo2_percentage",
          "breathing_disturbance_index"
        ],
        "title": "DailySpO2Model"
      },
      "DailyStressModel": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "day": {
            "type": "string",
            "format": "date",
            "title": "Day",
            "description": "Day that the daily stress belongs to."
          },
          "stress_high": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Stress High",
            "description": "Time (in seconds) spent in a high stress zone (top quartile data)"
          },
          "recovery_high": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recovery High",
            "description": "Time (in seconds) spent in a high recovery zone (bottom quartile data)"
          },
          "day_summary": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DailyStressSummary"
              },
              {
                "type": "null"
              }
            ],
            "description": "Stress summary of full day."
          }
        },
        "type": "object",
        "required": [
          "id",
          "day",
          "stress_high",
          "recovery_high"
        ],
        "title": "DailyStressModel",
        "description": "Object defining daily stress."
      },
      "DailyStressSummary": {
        "type": "string",
        "enum": [
          "restored",
          "normal",
          "stressful"
        ],
        "title": "DailyStressSummary",
        "description": "Possible daily stress summary types."
      },
      "EnhancedTagModel": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "tag_type_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tag Type Code",
            "description": "The unique code of the selected tag type, `NULL` for text-only tags, or `custom` for custom tag types."
          },
          "start_time": {
            "$ref": "#/components/schemas/LocalDateTime",
            "description": "Timestamp of the tag (if no duration) or the start time of the tag (with duration)."
          },
          "end_time": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/LocalDateTime"
              },
              {
                "type": "null"
              }
            ],
            "description": "Timestamp of the tag's end for events with duration or `NULL` if there is no duration."
          },
          "start_day": {
            "type": "string",
            "format": "date",
            "title": "Start Day",
            "description": "Day of the tag (if no duration) or the start day of the tag (with duration)."
          },
          "end_day": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Day",
            "description": "Day of the tag's end for events with duration or `NULL` if there is no duration."
          },
          "comment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Comment",
            "description": "Additional freeform text on the tag."
          },
          "custom_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Name",
            "description": "The name of the tag if the tag_type_code is `custom`."
          }
        },
        "type": "object",
        "required": [
          "id",
          "start_time",
          "start_day"
        ],
        "title": "EnhancedTagModel",
        "description": "An EnhancedTagModel maps an ASSATag. An ASSATag in ExtAPIV2 is called a EnhancedTag\nAn EnhancedTagModel will be populated by data from an ASSATag\nThe fields in the EnhancedTagModel map to fields in an ASSATag"
      },
      "ExtApiV2DataType": {
        "type": "string",
        "enum": [
          "tag",
          "enhanced_tag",
          "workout",
          "session",
          "sleep",
          "daily_sleep",
          "daily_readiness",
          "daily_activity",
          "daily_spo2",
          "sleep_time",
          "rest_mode_period",
          "ring_configuration",
          "daily_stress",
          "daily_cardiovascular_age",
          "daily_resilience",
          "vo2_max"
        ],
        "title": "ExtApiV2DataType"
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
          }
        },
        "type": "object",
        "title": "HTTPValidationError"
      },
      "HeartRateModel": {
        "properties": {
          "bpm": {
            "type": "integer",
            "title": "Bpm"
          },
          "source": {
            "$ref": "#/components/schemas/HeartRateSource"
          },
          "timestamp": {
            "$ref": "#/components/schemas/LocalDateTime"
          }
        },
        "type": "object",
        "required": [
          "bpm",
          "source",
          "timestamp"
        ],
        "title": "HeartRateModel"
      },
      "HeartRateSource": {
        "type": "string",
        "enum": [
          "awake",
          "rest",
          "sleep",
          "session",
          "live",
          "workout"
        ],
        "title": "HeartRateSource"
      },
      "ISODate": {
        "type": "string"
      },
      "LocalDateTime": {
        "type": "string"
      },
      "LocalDateTimeWithMilliseconds": {
        "type": "string"
      },
      "LocalizedDateTime": {
        "type": "string"
      },
      "LongTermResilienceLevel": {
        "type": "string",
        "enum": [
          "limited",
          "adequate",
          "solid",
          "strong",
          "exceptional"
        ],
        "title": "LongTermResilienceLevel",
        "description": "Possible long term resilience level values."
      },
      "MomentMood": {
        "type": "string",
        "enum": [
          "bad",
          "worse",
          "same",
          "good",
          "great"
        ],
        "title": "MomentMood",
        "description": "Possible Moment moods."
      },
      "MomentType": {
        "type": "string",
        "enum": [
          "breathing",
          "meditation",
          "nap",
          "relaxation",
          "rest",
          "body_status"
        ],
        "title": "MomentType",
        "description": "Possible Moment types."
      },
      "MultiDocumentResponse_DailyActivityModel_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/DailyActivityModel"
            },
            "type": "array",
            "title": "Data"
          },
          "next_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Token"
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_token"
        ],
        "title": "MultiDocumentResponse[DailyActivityModel]"
      },
      "MultiDocumentResponse_DailyCardiovascularAgeModel_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/DailyCardiovascularAgeModel"
            },
            "type": "array",
            "title": "Data"
          },
          "next_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Token"
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_token"
        ],
        "title": "MultiDocumentResponse[DailyCardiovascularAgeModel]"
      },
      "MultiDocumentResponse_DailyReadinessModel_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/DailyReadinessModel"
            },
            "type": "array",
            "title": "Data"
          },
          "next_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Token"
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_token"
        ],
        "title": "MultiDocumentResponse[DailyReadinessModel]"
      },
      "MultiDocumentResponse_DailyResilienceModel_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/DailyResilienceModel"
            },
            "type": "array",
            "title": "Data"
          },
          "next_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Token"
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_token"
        ],
        "title": "MultiDocumentResponse[DailyResilienceModel]"
      },
      "MultiDocumentResponse_DailySleepModel_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/DailySleepModel"
            },
            "type": "array",
            "title": "Data"
          },
          "next_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Token"
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_token"
        ],
        "title": "MultiDocumentResponse[DailySleepModel]"
      },
      "MultiDocumentResponse_DailySpO2Model_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/DailySpO2Model"
            },
            "type": "array",
            "title": "Data"
          },
          "next_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Token"
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_token"
        ],
        "title": "MultiDocumentResponse[DailySpO2Model]"
      },
      "MultiDocumentResponse_DailyStressModel_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/DailyStressModel"
            },
            "type": "array",
            "title": "Data"
          },
          "next_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Token"
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_token"
        ],
        "title": "MultiDocumentResponse[DailyStressModel]"
      },
      "MultiDocumentResponse_EnhancedTagModel_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/EnhancedTagModel"
            },
            "type": "array",
            "title": "Data"
          },
          "next_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Token"
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_token"
        ],
        "title": "MultiDocumentResponse[EnhancedTagModel]"
      },
      "MultiDocumentResponse_PublicWorkout_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/PublicWorkout"
            },
            "type": "array",
            "title": "Data"
          },
          "next_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Token"
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_token"
        ],
        "title": "MultiDocumentResponse[PublicWorkout]"
      },
      "MultiDocumentResponse_RestModePeriodModel_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/RestModePeriodModel"
            },
            "type": "array",
            "title": "Data"
          },
          "next_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Token"
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_token"
        ],
        "title": "MultiDocumentResponse[RestModePeriodModel]"
      },
      "MultiDocumentResponse_RingConfigurationModel_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/RingConfigurationModel"
            },
            "type": "array",
            "title": "Data"
          },
          "next_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Token"
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_token"
        ],
        "title": "MultiDocumentResponse[RingConfigurationModel]"
      },
      "MultiDocumentResponse_SessionModel_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/SessionModel"
            },
            "type": "array",
            "title": "Data"
          },
          "next_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Token"
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_token"
        ],
        "title": "MultiDocumentResponse[SessionModel]"
      },
      "MultiDocumentResponse_SleepModel_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/SleepModel"
            },
            "type": "array",
            "title": "Data"
          },
          "next_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Token"
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_token"
        ],
        "title": "MultiDocumentResponse[SleepModel]"
      },
      "MultiDocumentResponse_SleepTimeModel_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/SleepTimeModel"
            },
            "type": "array",
            "title": "Data"
          },
          "next_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Token"
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_token"
        ],
        "title": "MultiDocumentResponse[SleepTimeModel]"
      },
      "MultiDocumentResponse_TagModel_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/TagModel"
            },
            "type": "array",
            "title": "Data"
          },
          "next_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Token"
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_token"
        ],
        "title": "MultiDocumentResponse[TagModel]"
      },
      "MultiDocumentResponse_VO2MaxModel_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/VO2MaxModel"
            },
            "type": "array",
            "title": "Data"
          },
          "next_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Token"
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_token"
        ],
        "title": "MultiDocumentResponse[VO2MaxModel]"
      },
      "PersonalInfoResponse": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "age": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Age"
          },
          "weight": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Weight"
          },
          "height": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Height"
          },
          "biological_sex": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Biological Sex"
          },
          "email": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email"
          }
        },
        "type": "object",
        "required": [
          "id"
        ],
        "title": "PersonalInfoResponse"
      },
      "PublicWorkout": {
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "title": "",
            "description": "Unique identifier of the object."
          },
          "activity": {
            "type": "string",
            "title": "",
            "description": "Type of the workout activity."
          },
          "calories": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "",
            "description": "Energy burned in kilocalories during the workout."
          },
          "day": {
            "$ref": "#/components/schemas/ISODate",
            "title": "",
            "description": "Day when the workout occurred."
          },
          "distance": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "",
            "description": "Distance traveled in meters during the workout."
          },
          "end_datetime": {
            "$ref": "#/components/schemas/LocalizedDateTime",
            "title": "",
            "description": "Timestamp indicating when the workout ended."
          },
          "intensity": {
            "$ref": "#/components/schemas/PublicWorkoutIntensity",
            "title": "",
            "description": "Intensity of the workout."
          },
          "label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "",
            "description": "User-defined label for the workout."
          },
          "source": {
            "$ref": "#/components/schemas/PublicWorkoutSource",
            "title": "",
            "description": "Possible workout sources."
          },
          "start_datetime": {
            "$ref": "#/components/schemas/LocalizedDateTime",
            "title": "",
            "description": "Timestamp indicating when the workout started."
          }
        },
        "type": "object",
        "required": [
          "id",
          "activity",
          "day",
          "end_datetime",
          "intensity",
          "source",
          "start_datetime"
        ],
        "title": "PublicWorkout",
        "description": "Public model for Workout.",
        "x-cloud-only": true,
        "x-collection": "publicworkout",
        "x-owner": "Movement"
      },
      "PublicWorkoutIntensity": {
        "type": "string",
        "enum": [
          "easy",
          "moderate",
          "hard"
        ],
        "title": "PublicWorkoutIntensity",
        "description": "Possible workout intensities."
      },
      "PublicWorkoutSource": {
        "type": "string",
        "enum": [
          "manual",
          "autodetected",
          "confirmed",
          "workout_heart_rate"
        ],
        "title": "PublicWorkoutSource",
        "description": "Possible workout sources."
      },
      "ReadinessContributors": {
        "properties": {
          "activity_balance": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Activity Balance",
            "description": "Contribution of cumulative activity balance in range [1, 100]."
          },
          "body_temperature": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Body Temperature",
            "description": "Contribution of body temperature in range [1, 100]."
          },
          "hrv_balance": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Hrv Balance",
            "description": "Contribution of heart rate variability balance in range [1, 100]."
          },
          "previous_day_activity": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Previous Day Activity",
            "description": "Contribution of previous day's activity in range [1, 100]."
          },
          "previous_night": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Previous Night",
            "description": "Contribution of previous night's sleep in range [1, 100]."
          },
          "recovery_index": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recovery Index",
            "description": "Contribution of recovery index in range [1, 100]."
          },
          "resting_heart_rate": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resting Heart Rate",
            "description": "Contribution of resting heart rate in range [1, 100]."
          },
          "sleep_balance": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sleep Balance",
            "description": "Contribution of sleep balance in range [1, 100]."
          },
          "sleep_regularity": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sleep Regularity",
            "description": "Contribution of sleep regularity in range [1, 100]."
          }
        },
        "type": "object",
        "required": [
          "activity_balance",
          "body_temperature",
          "hrv_balance",
          "previous_day_activity",
          "previous_night",
          "recovery_index",
          "resting_heart_rate",
          "sleep_balance",
          "sleep_regularity"
        ],
        "title": "ReadinessContributors",
        "description": "Object defining readiness score contributors."
      },
      "ReadinessSummary": {
        "properties": {
          "contributors": {
            "$ref": "#/components/schemas/ReadinessContributors"
          },
          "score": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Score"
          },
          "temperature_deviation": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Temperature Deviation"
          },
          "temperature_trend_deviation": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Temperature Trend Deviation"
          }
        },
        "type": "object",
        "required": [
          "contributors"
        ],
        "title": "ReadinessSummary"
      },
      "ResilienceContributors": {
        "properties": {
          "sleep_recovery": {
            "type": "number",
            "title": "Sleep Recovery",
            "description": "Sleep recovery contributor to the resilience score. Range: [0, 100]"
          },
          "daytime_recovery": {
            "type": "number",
            "title": "Daytime Recovery",
            "description": "Daytime recovery contributor to the resilience score. Range: [0, 100]"
          },
          "stress": {
            "type": "number",
            "title": "Stress",
            "description": "Stress contributor to the resilience score. Range: [0, 100]"
          }
        },
        "type": "object",
        "required": [
          "sleep_recovery",
          "daytime_recovery",
          "stress"
        ],
        "title": "ResilienceContributors"
      },
      "RestModeEpisode": {
        "properties": {
          "tags": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "",
            "description": "Tags selected for the episode."
          },
          "timestamp": {
            "$ref": "#/components/schemas/LocalizedDateTime",
            "title": "",
            "description": "Timestamp indicating when the episode occurred."
          }
        },
        "type": "object",
        "required": [
          "tags",
          "timestamp"
        ],
        "title": "RestModeEpisode",
        "description": "Object defining a Rest Mode episode."
      },
      "RestModePeriodModel": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "end_day": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Day",
            "description": "End date of rest mode."
          },
          "end_time": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/LocalDateTime"
              },
              {
                "type": "null"
              }
            ],
            "description": "Timestamp when rest mode ended."
          },
          "episodes": {
            "items": {
              "$ref": "#/components/schemas/RestModeEpisode"
            },
            "type": "array",
            "title": "Episodes",
            "description": "Collection of episodes during rest mode, consisting of tags."
          },
          "start_day": {
            "type": "string",
            "format": "date",
            "title": "Start Day",
            "description": "Start date of rest mode."
          },
          "start_time": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/LocalDateTime"
              },
              {
                "type": "null"
              }
            ],
            "description": "Timestamp when rest mode started."
          }
        },
        "type": "object",
        "required": [
          "id",
          "episodes",
          "start_day",
          "start_time"
        ],
        "title": "RestModePeriodModel",
        "description": "Object contains information about rest mode episode."
      },
      "RingColor": {
        "type": "string",
        "enum": [
          "brushed_silver",
          "glossy_black",
          "glossy_gold",
          "glossy_white",
          "gucci",
          "matt_gold",
          "rose",
          "silver",
          "stealth_black",
          "titanium",
          "titanium_and_gold"
        ],
        "title": "RingColor"
      },
      "RingConfigurationModel": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "color": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RingColor"
              },
              {
                "type": "null"
              }
            ],
            "description": "Color of the ring."
          },
          "design": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RingDesign"
              },
              {
                "type": "null"
              }
            ],
            "description": "Design of the ring."
          },
          "firmware_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Firmware Version",
            "description": "Firmware version of the ring."
          },
          "hardware_type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RingHardwareType"
              },
              {
                "type": "null"
              }
            ],
            "description": "Hardware type of the ring."
          },
          "set_up_at": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/LocalDateTime"
              },
              {
                "type": "null"
              }
            ],
            "description": "UTC timestamp indicating when the ring was set up."
          },
          "size": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Size",
            "description": "US size of the ring."
          }
        },
        "type": "object",
        "required": [
          "id"
        ],
        "title": "RingConfigurationModel"
      },
      "RingDesign": {
        "type": "string",
        "enum": [
          "balance",
          "balance_diamond",
          "heritage",
          "horizon"
        ],
        "title": "RingDesign"
      },
      "RingHardwareType": {
        "type": "string",
        "enum": [
          "gen1",
          "gen2",
          "gen2m",
          "gen3",
          "gen4"
        ],
        "title": "RingHardwareType"
      },
      "SampleModel": {
        "properties": {
          "interval": {
            "type": "number",
            "title": "Interval",
            "description": "Interval in seconds between the sampled items."
          },
          "items": {
            "items": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "type": "array",
            "title": "Items",
            "description": "Recorded sample items."
          },
          "timestamp": {
            "$ref": "#/components/schemas/LocalDateTimeWithMilliseconds",
            "description": "Timestamp when the sample recording started."
          }
        },
        "type": "object",
        "required": [
          "interval",
          "items",
          "timestamp"
        ],
        "title": "SampleModel"
      },
      "SessionModel": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "day": {
            "type": "string",
            "format": "date",
            "title": "Day",
            "description": "The date when the session occurred."
          },
          "start_datetime": {
            "$ref": "#/components/schemas/LocalDateTime",
            "description": "Timestamp indicating when the Moment ended."
          },
          "end_datetime": {
            "$ref": "#/components/schemas/LocalDateTime",
            "description": "Timestamp indicating when the Moment ended."
          },
          "type": {
            "$ref": "#/components/schemas/MomentType"
          },
          "heart_rate": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SampleModel"
              },
              {
                "type": "null"
              }
            ]
          },
          "heart_rate_variability": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SampleModel"
              },
              {
                "type": "null"
              }
            ]
          },
          "mood": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MomentMood"
              },
              {
                "type": "null"
              }
            ]
          },
          "motion_count": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SampleModel"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "required": [
          "id",
          "day",
          "start_datetime",
          "end_datetime",
          "type"
        ],
        "title": "SessionModel"
      },
      "SleepAlgorithmVersion": {
        "type": "string",
        "enum": [
          "v1",
          "v2"
        ],
        "title": "SleepAlgorithmVersion"
      },
      "SleepAnalysisReason": {
        "type": "string",
        "enum": [
          "foreground_sleep_analysis",
          "bedtime_edit"
        ],
        "title": "SleepAnalysisReason",
        "description": "Possible sleep analysis reasons."
      },
      "SleepContributors": {
        "properties": {
          "deep_sleep": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "",
            "description": "Contribution of deep sleep in range [1, 100]."
          },
          "efficiency": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "",
            "description": "Contribution of sleep efficiency in range [1, 100]."
          },
          "latency": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "",
            "description": "Contribution of sleep latency in range [1, 100]."
          },
          "rem_sleep": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "",
            "description": "Contribution of REM sleep in range [1, 100]."
          },
          "restfulness": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "",
            "description": "Contribution of sleep restfulness in range [1, 100]."
          },
          "timing": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "",
            "description": "Contribution of sleep timing in range [1, 100]."
          },
          "total_sleep": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "",
            "description": "Contribution of total sleep in range [1, 100]."
          }
        },
        "type": "object",
        "title": "SleepContributors",
        "description": "Object defining sleep score contributors."
      },
      "SleepModel": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "average_breath": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Average Breath",
            "description": "Average breathing rate during sleep as breaths/second."
          },
          "average_heart_rate": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Average Heart Rate",
            "description": "Average heart rate during sleep as beats/minute."
          },
          "average_hrv": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Average Hrv",
            "description": "Average heart rate variability during sleep."
          },
          "awake_time": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Awake Time",
            "description": "Duration spent awake in seconds."
          },
          "bedtime_end": {
            "$ref": "#/components/schemas/LocalDateTime",
            "description": "Bedtime end of the sleep."
          },
          "bedtime_start": {
            "$ref": "#/components/schemas/LocalDateTime",
            "description": "Bedtime start of the sleep."
          },
          "day": {
            "type": "string",
            "format": "date",
            "title": "Day",
            "description": "Day that the sleep belongs to."
          },
          "deep_sleep_duration": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deep Sleep Duration",
            "description": "Duration spent in deep sleep in seconds."
          },
          "efficiency": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Efficiency",
            "description": "Sleep efficiency rating in range [1, 100]."
          },
          "heart_rate": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SampleModel"
              },
              {
                "type": "null"
              }
            ],
            "description": "Object containing heart rate samples."
          },
          "hrv": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SampleModel"
              },
              {
                "type": "null"
              }
            ]
          },
          "latency": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Latency",
            "description": "Sleep latency in seconds. This is the time it took for the user to fall asleep after going to bed."
          },
          "light_sleep_duration": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Light Sleep Duration",
            "description": "Duration spent in light sleep in seconds."
          },
          "low_battery_alert": {
            "type": "boolean",
            "title": "Low Battery Alert",
            "description": "Flag indicating if a low battery alert occurred."
          },
          "lowest_heart_rate": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lowest Heart Rate",
            "description": "Lowest heart rate during sleep."
          },
          "movement_30_sec": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Movement 30 Sec",
            "description": "\n        30-second movement classification for the period where every character corresponds to:\n        '1' = no motion,\n        '2' = restless,\n        '3' = tossing and turning\n        '4' = active\n        ",
            "examples": [
              "1143222134"
            ]
          },
          "period": {
            "type": "integer",
            "title": "Period",
            "description": "ECore sleep period identifier."
          },
          "readiness": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ReadinessSummary"
              },
              {
                "type": "null"
              }
            ],
            "description": "Object containing the readiness details for this sleep. As opposed to the daily readiness object which represents the readiness for the entire day."
          },
          "readiness_score_delta": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Readiness Score Delta",
            "description": "Effect on readiness score caused by this sleep period."
          },
          "rem_sleep_duration": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rem Sleep Duration",
            "description": "Duration spent in REM sleep in seconds."
          },
          "restless_periods": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Restless Periods",
            "description": "Number of restless periods during sleep."
          },
          "sleep_phase_5_min": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sleep Phase 5 Min",
            "description": "\n        5-minute sleep phase classification for the period where every character corresponds to:\n        '1' = deep sleep,\n        '2' = light sleep,\n        '3' = REM sleep\n        '4' = awake.\n        ",
            "examples": [
              "444423323441114"
            ]
          },
          "sleep_score_delta": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sleep Score Delta",
            "description": "Effect on sleep score caused by this sleep period."
          },
          "sleep_algorithm_version": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SleepAlgorithmVersion"
              },
              {
                "type": "null"
              }
            ],
            "description": "Version of the sleep algorithm used to calculate the sleep data."
          },
          "sleep_analysis_reason": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SleepAnalysisReason"
              },
              {
                "type": "null"
              }
            ],
            "description": "The reason for the creation or update of the latest version of this sleep."
          },
          "time_in_bed": {
            "type": "integer",
            "title": "Time In Bed",
            "description": "Duration spent in bed in seconds."
          },
          "total_sleep_duration": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total Sleep Duration",
            "description": "Total sleep duration in seconds."
          },
          "type": {
            "$ref": "#/components/schemas/SleepType"
          }
        },
        "type": "object",
        "required": [
          "id",
          "average_breath",
          "average_heart_rate",
          "average_hrv",
          "awake_time",
          "bedtime_end",
          "bedtime_start",
          "day",
          "deep_sleep_duration",
          "efficiency",
          "heart_rate",
          "hrv",
          "latency",
          "light_sleep_duration",
          "low_battery_alert",
          "lowest_heart_rate",
          "movement_30_sec",
          "period",
          "readiness",
          "readiness_score_delta",
          "rem_sleep_duration",
          "restless_periods",
          "sleep_phase_5_min",
          "sleep_score_delta",
          "sleep_algorithm_version",
          "time_in_bed",
          "total_sleep_duration",
          "type"
        ],
        "title": "SleepModel"
      },
      "SleepTimeModel": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "day": {
            "type": "string",
            "format": "date",
            "title": "Day",
            "description": "Corresponding day for the sleep time."
          },
          "optimal_bedtime": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SleepTimeWindow"
              },
              {
                "type": "null"
              }
            ],
            "description": "Optimal bedtime."
          },
          "recommendation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SleepTimeRecommendation"
              },
              {
                "type": "null"
              }
            ],
            "description": "Recommended action for bedtime."
          },
          "status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SleepTimeStatus"
              },
              {
                "type": "null"
              }
            ],
            "description": "Sleep time status; used to inform sleep time recommendation."
          }
        },
        "type": "object",
        "required": [
          "id",
          "day"
        ],
        "title": "SleepTimeModel",
        "description": "Object contains suggested bedtime for the user."
      },
      "SleepTimeRecommendation": {
        "type": "string",
        "enum": [
          "improve_efficiency",
          "earlier_bedtime",
          "later_bedtime",
          "earlier_wake_up_time",
          "later_wake_up_time",
          "follow_optimal_bedtime"
        ],
        "title": "SleepTimeRecommendation",
        "description": "Possible SleepTime recommendation."
      },
      "SleepTimeStatus": {
        "type": "string",
        "enum": [
          "not_enough_nights",
          "not_enough_recent_nights",
          "bad_sleep_quality",
          "only_recommended_found",
          "optimal_found"
        ],
        "title": "SleepTimeStatus",
        "description": "Possible SleepTime status."
      },
      "SleepTimeWindow": {
        "properties": {
          "day_tz": {
            "type": "integer",
            "title": "",
            "description": "Timezone offset in second from GMT of the day"
          },
          "end_offset": {
            "type": "integer",
            "title": "",
            "description": "End offset from midnight in second"
          },
          "start_offset": {
            "type": "integer",
            "title": "",
            "description": "Start offset from midnight in second"
          }
        },
        "type": "object",
        "required": [
          "day_tz",
          "end_offset",
          "start_offset"
        ],
        "title": "SleepTimeWindow",
        "description": "Object defining sleep time window"
      },
      "SleepType": {
        "type": "string",
        "enum": [
          "deleted",
          "sleep",
          "long_sleep",
          "late_nap",
          "rest"
        ],
        "title": "SleepType",
        "description": "Possible sleep period types.\n'deleted' = deleted sleep by user.\n'sleep' = user confirmed sleep / nap, min 15 minutes, max 3 hours, contributes to daily scores\n'late_nap' = user confirmed sleep / nap, min 15 minutes, ended after sleep day change (6 pm), contributes to next days daily scores\n'long_sleep' = sleep that is long enough (>3h) to automatically contribute to daily scores\n'rest' = Falsely detected sleep / nap, rejected in confirm prompt by user"
      },
      "TagModel": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "day": {
            "type": "string",
            "format": "date",
            "title": "Day",
            "description": "Day that the note belongs to."
          },
          "text": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Text",
            "description": "Textual contents of the note."
          },
          "timestamp": {
            "$ref": "#/components/schemas/LocalDateTime",
            "description": "Timestamp of the note."
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Tags",
            "description": "Selected tags for the tag."
          }
        },
        "type": "object",
        "required": [
          "id",
          "day",
          "text",
          "timestamp",
          "tags"
        ],
        "title": "TagModel",
        "description": "A TagModel maps to an ASSANote. An ASSANote in ExtAPIV2 is called a Tag\nA TagModel will be populated by data from an ASSANote\nThe fields in the TagModel map to fields in an ASSANote"
      },
      "TimeSeriesResponse_HeartRateModel_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/HeartRateModel"
            },
            "type": "array",
            "title": "Data"
          },
          "next_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Token"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "TimeSeriesResponse[HeartRateModel]"
      },
      "UpdateWebhookSubscriptionRequest": {
        "properties": {
          "verification_token": {
            "type": "string",
            "title": "Verification Token"
          },
          "callback_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Callback Url"
          },
          "event_type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/WebhookOperation"
              },
              {
                "type": "null"
              }
            ]
          },
          "data_type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ExtApiV2DataType"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "required": [
          "verification_token"
        ],
        "title": "UpdateWebhookSubscriptionRequest"
      },
      "UtcDateTime": {
        "type": "string"
      },
      "VO2MaxModel": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "day": {
            "type": "string",
            "format": "date",
            "title": "Day",
            "description": "Day that the estimate belongs to."
          },
          "timestamp": {
            "$ref": "#/components/schemas/LocalDateTime",
            "description": "Timestamp indicating when the estimate was created."
          },
          "vo2_max": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Vo2 Max",
            "description": "VO2 max value."
          }
        },
        "type": "object",
        "required": [
          "id",
          "day",
          "timestamp",
          "vo2_max"
        ],
        "title": "VO2MaxModel"
      },
      "ValidationError": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "WebhookOperation": {
        "type": "string",
        "enum": [
          "create",
          "update",
          "delete"
        ],
        "title": "WebhookOperation"
      },
      "WebhookSubscriptionModel": {
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid4",
            "title": "Id"
          },
          "callback_url": {
            "type": "string",
            "title": "Callback Url"
          },
          "event_type": {
            "$ref": "#/components/schemas/WebhookOperation"
          },
          "data_type": {
            "$ref": "#/components/schemas/ExtApiV2DataType"
          },
          "expiration_time": {
            "type": "string",
            "format": "date-time",
            "title": "Expiration Time"
          }
        },
        "type": "object",
        "required": [
          "id",
          "callback_url",
          "event_type",
          "data_type",
          "expiration_time"
        ],
        "title": "WebhookSubscriptionModel"
      }
    },
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer"
      },
      "OAuth2": {
        "type": "oauth2",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://cloud.ouraring.com/oauth/authorize",
            "tokenUrl": "https://api.ouraring.com/oauth/token",
            "scopes": {
              "email": "Email address of the user",
              "personal": "Personal information (gender, age, height, weight)",
              "daily": "Daily summaries of sleep, activity and readiness",
              "heartrate": "Time series heart rate for Gen 3 users",
              "workout": "Summaries for auto-detected and user entered workouts",
              "tag User": "entered tags",
              "session": "Guided and unguided sessions in the Oura app",
              "spo2Daily": "SpO2 Average recorded during sleep"
            }
          }
        }
      },
      "ClientIdAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "x-client-id",
        "description": "Client ID for webhook subscription endpoints. Must be used together with x-client-secret header."
      },
      "ClientSecretAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "x-client-secret",
        "description": "Client Secret for webhook subscription endpoints. Must be used together with x-client-id header."
      }
    }
  },
  "tags": [
    {
      "name": "Data Model & Concepts",
      "description": "## Core Concepts\nThe Oura API provides access to various types of health data collected by the Oura Ring. Understanding how this data is organized is essential for effective API usage.\n### Data Types Overview\n- **Daily Summaries**: Aggregated metrics for each day (sleep score, readiness score, activity score)\n- **Time Series Data**: Detailed measurements taken throughout the day (heart rate, HRV, temperature)\n- **Events**: Discrete occurrences such as workouts, tags, and sessions\n### Data Processing Timeline\n1. **Data Collection**: The Oura Ring continuously collects biometric data\n2. **Syncing**: Data transfers to the Oura cloud when users sync their ring via the mobile app\n3. **Processing**: Algorithms analyze raw data to generate insights and scores\n4. **API Availability**: Processed data becomes available through API endpoints\n### Data Syncing Behavior\nDifferent data types follow different syncing patterns:\n- **User-Initiated Sync Data**:\n  - **Sleep Data**: Only syncs when the user opens the Oura app and actively syncs their ring\n  - **Sleep Time Recommendations**: Updated after sleep data syncs\n  - **Readiness**: Calculated after sleep data is processed\n- **Background Sync Data**:\n  - **Daily Activity**: Updates periodically in the background\n  - **Daily Stress**: Updates periodically in the background\n  - **Heart Rate**: Updates periodically in the background\nThis difference in syncing behavior affects when data becomes available through the API. For the most reliable access to all data types, we strongly recommend implementing webhooks to receive notifications when new data is available.\n### Common Data Structures\n- **Timestamps**: All time-based data uses ISO 8601 format\n- **Scores**: Range from 0-100, with higher values indicating better performance\n- **Durations**: Provided in seconds unless otherwise specified\n- **IDs**: Unique identifiers for specific data objects follow a consistent format\n### Data Freshness\nThe Oura API provides the most recently synced data, which depends on when users last synced their ring. For real-time updates, consider using webhooks to receive notifications when new data becomes available.\n### Best Practices for Data Access\n- **Initial Load**: When a user first connects to your application, make a single request for historical data\n- **Ongoing Updates**: Use webhooks for all subsequent data updates\n- **Webhook Integration**: This approach minimizes API calls and ensures you always have the latest data\n- **Error Handling**: Be prepared for occasional gaps in data if users don't regularly sync their rings\n### API Version Information\nThe current Oura API (V2) is the only available integration point. The previous V1 API has been sunset and is no longer available.\n"
    },
    {
      "name": "Code Examples",
      "description": "Below are end-to-end examples showing how to use the Oura API in different programming languages:\n## OAuth2 Authentication Flow\n### Python\n```python\nimport requests\nimport json\nfrom urllib.parse import urlencode\nimport webbrowser\n\n# Your OAuth2 application credentials\nCLIENT_ID = \"YOUR_CLIENT_ID\"\nCLIENT_SECRET = \"YOUR_CLIENT_SECRET\"\nREDIRECT_URI = \"YOUR_REDIRECT_URI\"\n\n# Step 1: Direct user to authorization page\nauth_params = {\n    \"client_id\": CLIENT_ID,\n    \"redirect_uri\": REDIRECT_URI,\n    \"response_type\": \"code\",\n    \"scope\": \"daily heartrate personal\"\n}\nauth_url = f\"https://cloud.ouraring.com/oauth/authorize?{urlencode(auth_params)}\"\nprint(f\"Please visit this URL to authorize: {auth_url}\")\nwebbrowser.open(auth_url)\n\n# Step 2: Exchange authorization code for access token\n# After user authorizes, they'll be redirected to your redirect URI with a code parameter\nauth_code = input(\"Enter the authorization code from the redirect URL: \")\n\ntoken_url = \"https://api.ouraring.com/oauth/token\"\ntoken_data = {\n    \"grant_type\": \"authorization_code\",\n    \"code\": auth_code,\n    \"client_id\": CLIENT_ID,\n    \"client_secret\": CLIENT_SECRET,\n    \"redirect_uri\": REDIRECT_URI\n}\nresponse = requests.post(token_url, data=token_data)\ntokens = response.json()\naccess_token = tokens[\"access_token\"]\nrefresh_token = tokens[\"refresh_token\"]\n\n# Step 3: Use the access token to make API calls\nheaders = {\"Authorization\": f\"Bearer {access_token}\"}\nsleep_data = requests.get(\n    \"https://api.ouraring.com/v2/usercollection/sleep\",\n    headers=headers,\n    params={\"start_date\": \"2023-01-01\", \"end_date\": \"2023-01-07\"}\n)\nprint(json.dumps(sleep_data.json(), indent=2))\n\n# Step 4: Refresh the token when it expires\ndef refresh_access_token(refresh_token):\n    token_data = {\n        \"grant_type\": \"refresh_token\",\n        \"refresh_token\": refresh_token,\n        \"client_id\": CLIENT_ID,\n        \"client_secret\": CLIENT_SECRET\n    }\n    response = requests.post(token_url, data=token_data)\n    new_tokens = response.json()\n    return new_tokens[\"access_token\"], new_tokens[\"refresh_token\"]\n```\n### JavaScript\n```javascript\n// Step 1: Redirect to authorization page\nconst authorizeUser = () => {\n  const CLIENT_ID = \"YOUR_CLIENT_ID\";\n  const REDIRECT_URI = \"YOUR_REDIRECT_URI\";\n  const scopes = [\"daily\", \"heartrate\", \"personal\"];\n\n  const authUrl = `https://cloud.ouraring.com/oauth/authorize?` +\n    `client_id=${CLIENT_ID}&` +\n    `redirect_uri=${encodeURIComponent(REDIRECT_URI)}&` +\n    `response_type=code&` +\n    `scope=${scopes.join(\" \")}`;\n\n  // Redirect user to authorization page\n  window.location.href = authUrl;\n};\n\n// Step 2: Exchange authorization code for access token\n// This should be implemented on your server to protect your client secret\nasync function getAccessToken(code) {\n  const response = await fetch(\"https://api.ouraring.com/oauth/token\", {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/x-www-form-urlencoded\",\n    },\n    body: new URLSearchParams({\n      grant_type: \"authorization_code\",\n      code: code,\n      client_id: \"YOUR_CLIENT_ID\",\n      client_secret: \"YOUR_CLIENT_SECRET\",\n      redirect_uri: \"YOUR_REDIRECT_URI\"\n    })\n  });\n\n  const tokens = await response.json();\n  return tokens;\n}\n\n// Step 3: Make API calls\nasync function fetchSleepData(accessToken) {\n  const startDate = \"2023-01-01\";\n  const endDate = \"2023-01-07\";\n\n  const response = await fetch(\n    `https://api.ouraring.com/v2/usercollection/sleep?start_date=${startDate}&end_date=${endDate}`,\n    {\n      headers: {\n        Authorization: `Bearer ${accessToken}`\n      }\n    }\n  );\n\n  return await response.json();\n}\n```\n## Working with Webhooks\n### NodeJS Express Server Example\n```javascript\nconst express = require('express');\nconst bodyParser = require('body-parser');\nconst crypto = require('crypto');\n\nconst app = express();\napp.use(bodyParser.json());\n\nconst CLIENT_SECRET = \"YOUR_CLIENT_SECRET\";\n\n// Verification endpoint for webhook setup\napp.get('/oura-webhook', (req, res) => {\n  const { verification_token, challenge } = req.query;\n\n  // Verify the token matches what you expect\n  if (verification_token === \"YOUR_VERIFICATION_TOKEN\") {\n    res.json({ challenge });\n  } else {\n    res.status(401).send('Invalid verification token');\n  }\n});\n\n// Webhook handler for incoming data\napp.post('/oura-webhook', (req, res) => {\n  const signature = req.headers['x-oura-signature'];\n  const timestamp = req.headers['x-oura-timestamp'];\n\n  // Verify HMAC signature for security\n  const hmac = crypto.createHmac('sha256', CLIENT_SECRET);\n  hmac.update(timestamp + JSON.stringify(req.body));\n  const calculatedSignature = hmac.digest('hex').toUpperCase();\n\n  if (calculatedSignature !== signature) {\n    return res.status(401).send('Invalid signature');\n  }\n\n  // Process the webhook data\n  const { event_type, data_type, object_id, user_id } = req.body;\n\n  console.log(`Received ${event_type} event for ${data_type}`);\n\n  // Fetch the updated data using the object_id\n  // This should be done asynchronously to respond quickly\n  fetchDataAsync(data_type, object_id, user_id);\n\n  // Respond quickly to acknowledge receipt\n  res.status(200).send('OK');\n});\n\napp.listen(3000, () => {\n  console.log('Webhook server listening on port 3000');\n});\n\n// Asynchronous function to fetch the updated data\nasync function fetchDataAsync(dataType, objectId, userId) {\n  // Implementation depends on your data storage and processing needs\n  // This would typically fetch the new data from the Oura API\n  // and update your database or application state\n}\n```\n"
    },
    {
      "name": "Frequently Asked Questions",
      "description": "## General Questions\n### What is the Oura API used for?\nThe Oura API allows developers to access Oura Ring data programmatically. This enables building applications, conducting research, or personal projects that use sleep, activity, readiness, and other health metrics collected by the Oura Ring.\n### How do I get started with the Oura API?\n1. Register an [OAuth application](https://cloud.ouraring.com/oauth/applications)\n2. Read the documentation and explore the available endpoints\n3. Make your first API call using the examples provided\n### What data types are available in the API?\nThe Oura API provides access to various data types including:\n- Sleep metrics and stages\n- Activity and movement data\n- Readiness scores and contributors\n- Heart rate and HRV measurements\n- Workout information\n- Tags and sessions\n- And more specialized metrics like SpO2, body temperature, and stress levels\n### Is the Oura API free to use?\nYes, the Oura API is free to use for both personal and commercial applications. However, API applications accessing more than 10 users require approval from Oura.\n## Technical Questions\n### What's the recommended way to consume Oura data?\nWebhooks are the preferred way to consume Oura data. We recommend:\n1. Make a single request for historical data when a user first connects to your application\n2. Set up webhook subscriptions for all data types you need\n3. Use webhook notifications to get updates as new data becomes available\nThis approach is efficient and we have not had customers hit rate limits with webhooks properly implemented.\n### How do I handle rate limits?\nThe Oura API is limited to 5000 requests per 5-minute period. To avoid hitting rate limits:\n- Use webhooks instead of polling (strongly recommended - we have not seen any customers hit rate limits with webhooks properly implemented)\n- Cache responses when appropriate\n- Batch requests for multiple days of data rather than individual day requests\n- Implement exponential backoff when you receive a 429 response\n### Why am I not seeing today's data?\nOura Ring data availability depends on the data type:\n- **Sleep, Readiness, and Sleep Time data**: Only available after the user opens the Oura app and syncs their ring\n- **Daily Activity, Daily Stress, and Heart Rate**: May update periodically in the background\nFor the most reliable access to all data types, implement webhooks to receive notifications when new data is available (approximately 30 seconds after the data syncs from the mobile app).\n### How do I handle timezone differences?\nAll timestamps in the Oura API use ISO 8601 format with timezone information. When querying data with date parameters, the dates are interpreted in the user's local timezone. Make sure to account for this when processing data across different timezones.\n### What API version should I use?\nThe current Oura API (V2) is the only available integration point. The previous V1 API has been sunset and is no longer available.\n### How do webhooks work with the Oura API?\nWebhooks allow you to receive near real-time notifications when new data is available, rather than constantly polling the API. You'll need to:\n1. Set up an endpoint on your server to receive webhook events\n2. Create webhook subscriptions for each data type and event type you're interested in\n3. Verify your endpoint when creating subscriptions\n4. Process webhook events as they arrive\n5. Fetch the full data using the provided IDs\nWebhook notifications arrive approximately 30 seconds after data syncs from the mobile app.\n## Troubleshooting\n### I'm getting 401 Unauthorized errors\nThis typically means your access token is invalid or expired. Check that:\n- You're including the token correctly in the Authorization header\n- The token hasn't expired (they typically last 30 days)\n- The user hasn't revoked access\n- For OAuth2 applications, try refreshing the token\n### I'm getting 403 Forbidden errors\nThis usually means the user's Oura subscription has expired or they haven't granted permission for the specific data type you're requesting.\n### Why am I not receiving webhook events?\nEnsure that:\n- Your webhook endpoint is publicly accessible\n- The endpoint responds to the verification challenge correctly\n- Your endpoint responds within 10 seconds with a 2xx or 3xx status code\n- You've subscribed to the correct data types and event types\n- The user has synced their ring recently to generate new data\n### How can I validate that a webhook is legitimate?\nAlways verify the HMAC signature included in the x-oura-signature header using your client secret as shown in the webhook code examples.\n## Best Practices\n### What's the best approach for accessing historical data?\nWe recommend:\n1. When a user first connects to your application, make a single request for historical data\n2. For ongoing updates, use webhooks instead of repeated API calls\n3. Store the historical data in your own database for easy access\n4. Only fetch new or updated data based on webhook notifications\nThis approach minimizes API calls and ensures your application always has the latest data without hitting rate limits.\n### How should I handle missing data?\nSome users may have gaps in their data if they didn't wear their ring or haven't synced it recently. Your application should:\n- Check for null values in responses\n- Have fallback logic for missing data points\n- Consider displaying gaps in visualizations rather than connecting across missing data\n- Use webhooks to ensure you're promptly notified when new data becomes available\n### What's the best way to get historical data?\nTo efficiently retrieve a large amount of historical data:\n1. Use date range queries with reasonable time spans (e.g., 1-3 months at a time)\n2. Implement pagination using the next_token parameter for large result sets\n3. Consider running historical data collection as a background job\n4. Store the data in your own database to avoid repeated API calls\n### How can I ensure user privacy?\n- Only request access to the data types your application needs\n- Store tokens securely and never expose them in client-side code\n- Implement proper security measures for storing health data\n- Be transparent with users about how their data will be used\n- Allow users to disconnect your application and delete their data\n"
    },
    {
      "name": "Authentication Troubleshooting",
      "description": "## Common Authentication Issues\n### \"401 Unauthorized\" Error\nThis is the most common authentication error and typically means there's an issue with your token. Here are the most frequent causes and solutions:\n#### 1. Invalid Token Format\n**Problem**: The token you're using isn't formatted correctly in the request.\n**Solution**: Ensure you're including \"Bearer\" before your token:\n```\nAuthorization: Bearer your-token-here\n```\n**Example Correct Implementation**:\n```javascript\n// JavaScript example\nfetch('https://api.ouraring.com/v2/usercollection/personal_info', {\n  headers: {\n    'Authorization': 'Bearer ' + accessToken  // Note the space after \"Bearer\"\n  }\n})\n```\n#### 2. Expired Token\n**Problem**: OAuth2 access tokens expire after a period (typically 24 hours for Oura).\n**Solution**: Use your refresh token to get a new access token:\n```http\nPOST https://api.ouraring.com/oauth/token\nContent-Type: application/x-www-form-urlencoded\n\ngrant_type=refresh_token&\nrefresh_token=YOUR_REFRESH_TOKEN&\nclient_id=YOUR_CLIENT_ID&\nclient_secret=YOUR_CLIENT_SECRET\n```\n\n**Handling Token Expiration**:\n```javascript\n// JavaScript example of handling expired tokens\nasync function callApi(endpoint, accessToken, refreshToken) {\n  try {\n    const response = await fetch(`https://api.ouraring.com/v2/${endpoint}`, {\n      headers: {\n        'Authorization': `Bearer ${accessToken}`\n      }\n    });\n\n    if (response.status === 401) {\n      // Token expired, try to refresh\n      const newTokens = await refreshAccessToken(refreshToken);\n\n      // Retry the request with the new token\n      return fetch(`https://api.ouraring.com/v2/${endpoint}`, {\n        headers: {\n          'Authorization': `Bearer ${newTokens.access_token}`\n        }\n      });\n    }\n\n    return response;\n  } catch (error) {\n    console.error('API call failed:', error);\n    throw error;\n  }\n}\n\nasync function refreshAccessToken(refreshToken) {\n  const response = await fetch('https://api.ouraring.com/oauth/token', {\n    method: 'POST',\n    headers: {\n      'Content-Type': 'application/x-www-form-urlencoded'\n    },\n    body: new URLSearchParams({\n      'grant_type': 'refresh_token',\n      'refresh_token': refreshToken,\n      'client_id': YOUR_CLIENT_ID,\n      'client_secret': YOUR_CLIENT_SECRET\n    })\n  });\n\n  return response.json();\n}\n```\n\n#### 3. Revoked Access\n**Problem**: The user has revoked access to your application.\n\n**Solution**: The user needs to re-authorize your application. Direct them to the authorization URL:\n```\nhttps://cloud.ouraring.com/oauth/authorize?\n  client_id=YOUR_CLIENT_ID&\n  redirect_uri=YOUR_REDIRECT_URI&\n  response_type=code&\n  scope=daily heartrate personal\n```\n### \"403 Forbidden\" Error\nThis error means your authentication is valid, but you don't have permission to access the requested resource.\n#### 1. Missing Scope Permission\n**Problem**: Your OAuth application doesn't have the necessary scope for the endpoint.\n**Solution**: Request the needed scopes during authorization:\n```\nhttps://cloud.ouraring.com/oauth/authorize?\n  client_id=YOUR_CLIENT_ID&\n  redirect_uri=YOUR_REDIRECT_URI&\n  response_type=code&\n  scope=daily heartrate personal workout session\n```\n**Available Scopes**:\n- `daily`: Daily summaries (sleep, activity, readiness)\n- `heartrate`: Heart rate data\n- `personal`: Personal information (age, gender, etc.)\n- `workout`: Workout data\n- `session`: Session data\n- `tag`: Tag data\n#### 2. Expired Oura Membership\n**Problem**: The user's Oura membership has expired.\n**Solution**: The user needs to renew their Oura membership to restore API access.\n### OAuth2 Flow Debugging\n#### Authorization Code Flow Issues\n**Problem**: Not receiving an authorization code after user consent.\n**Solutions**:\n1. Verify your redirect URI exactly matches what's registered in your application\n2. Check for errors in the redirect (look for `error` and `error_description` query parameters)\n3. Ensure the user is completing the consent process\n**Example Debugging**:\n```javascript\n// Parse the URL after redirect\nconst urlParams = new URLSearchParams(window.location.search);\nconst error = urlParams.get('error');\nconst errorDescription = urlParams.get('error_description');\n\nif (error) {\n  console.error(`Authorization failed: ${error} - ${errorDescription}`);\n} else {\n  const code = urlParams.get('code');\n  if (code) {\n    // Proceed with token exchange\n  } else {\n    console.error('No authorization code received in the redirect');\n  }\n}\n```\n#### Token Exchange Issues\n**Problem**: Error when exchanging authorization code for tokens.\n**Common Errors and Solutions**:\n- `invalid_grant`: The authorization code is expired (valid for only 10 minutes) or already used\n- `invalid_client`: Client ID or secret is incorrect\n- `invalid_redirect_uri`: Redirect URI doesn't match the one used during authorization\n**Testing Token Exchange**:\n```bash\n# Using curl to debug token exchange\ncurl -X POST https://api.ouraring.com/oauth/token   -d \"grant_type=authorization_code\"   -d \"code=YOUR_AUTH_CODE\"   -d \"client_id=YOUR_CLIENT_ID\"   -d \"client_secret=YOUR_CLIENT_SECRET\"   -d \"redirect_uri=YOUR_REDIRECT_URI\"\n```\n## Authentication Best Practices\n### Security Recommendations\n1. **Never store access tokens in client-side code** or expose them in URLs\n2. **Use HTTPS** for all communication with the Oura API\n3. **Store refresh tokens securely** (e.g., in an encrypted database)\n4. **Implement token rotation** to regularly refresh access tokens\n5. **Validate tokens** before using them if they've been stored for a while\n### Token Management\n1. **Create a token service** in your backend to handle token operations:\n   - Storing tokens securely\n   - Refreshing expired tokens\n   - Associating tokens with user accounts\n2. **Handle token revocation gracefully**:\n   - Detect when a token has been revoked\n   - Clear local token storage\n   - Prompt the user to re-authorize when needed\n3. **Implement proper error handling**:\n   - Distinguish between different types of auth errors\n   - Provide clear messages to users\n   - Log authentication issues for debugging\n"
    },
    {
      "name": "Daily Activity Routes",
      "description": "The Daily Activity scope includes daily activity summary values and detailed activity levels. Activity levels are expressed in [metabolic equivalent of task minutes](https://en.wikipedia.org/wiki/Metabolic_equivalent) (MET mins). Oura tracks activity based on the movement."
    },
    {
      "name": "Daily Cardiovascular Age Routes",
      "description": "Cardiovascular Age is an estimate of the health of your cardiovascular system in relation to your actual age. See more details [here](https://support.ouraring.com/hc/en-us/articles/28451491040019-Cardiovascular-Age)."
    },
    {
      "name": "Daily Readiness Routes",
      "description": "Readiness tells how ready you are for the day."
    },
    {
      "name": "Daily Resilience Routes",
      "description": "Resilience is an estimate of your ability to withstand physiological stress and recover from it over time.",
      "externalDocs": {
        "description": "Learn more about Resilience",
        "url": "https://support.ouraring.com/hc/en-us/articles/25358829055251-Resilience"
      }
    },
    {
      "name": "Daily Sleep Routes",
      "description": "Sleep period is a nearly continuous, longish period of time spent lying down in bed."
    },
    {
      "name": "Daily Spo2 Routes",
      "description": "The Daily SpO2 (blood oxygenation) routes include daily SpO2 average. Data will only be available for users with a Gen 3 Oura Ring",
      "externalDocs": {
        "description": "Blood Oxygen Sensing (SpO2) on Oura",
        "url": "https://ouraring.com/blog/blood-oxygen-sensing-spo2/?g_acctid=553-919-5922&g_adgroupid=&g_adid=&g_adtype=none&g_campaign=pmax_prospecting-retargeting_integrated_allgeos_purchase_english&g_campaignid=17714554930&g_keyword=&g_keywordid=&g_network=x&utm_campaign=pmax_prospecting-retargeting_integrated_allgeos_purchase_english&utm_content=sleeplab_prospecting_allgeos_en_static_video&utm_medium=cpc&utm_source=google&utm_source=google_pmax&gclid=CjwKCAjwloynBhBbEiwAGY25dC2B6syXyPhIQ1Bo8IufRQrBWtooTEFkclzEWdUCHNZIoq5SzurHaRoCsukQAvD_BwE"
      }
    },
    {
      "name": "Daily Stress Routes",
      "description": "The daily stress route includes a summary of the number of minutes the user spends in high stress and high recovery each day. This is a great way to see how your stress and recovery are trending over time. Stress and recovery are mutally exclusive. E.g. one can only be stressed or recovered at any given moement - and cannot be stressed and recovered at the same time.",
      "externalDocs": {
        "description": "Learn more about daytime stress",
        "url": "https://ouraring.com/blog/daytime-stress-feature"
      }
    },
    {
      "name": "Enhanced Tag Routes",
      "description": "The Enhanced Tags data scope includes tags that Oura users enter within the Oura mobile app. Enhanced Tags can be added for any lifestyle choice, habit, mood change, or environmental factor an Oura user wants to monitor the effects of. Enhanced Tags also contain context on a tag's start and end time, whether a tag repeats daily, and comments.\n\n[Learn more about how Oura users add Enhanced Tags](https://support.ouraring.com/hc/en-us/articles/360038676993-How-to-Use-Tags)",
      "externalDocs": {
        "description": "More information about Enhanced Tags",
        "url": "https://ouraring.com/blog/tags/"
      }
    },
    {
      "name": "Heart Rate Routes",
      "description": "The Heart Rate data scope includes time-series heart rate data throughout the day and night. Heart rate is provided at 5-minute increments. For heart rate data recorded from a Session, see Sessions endpoint.",
      "externalDocs": {
        "description": "How accurate is the heart rate data generated by the Oura Ring?",
        "url": "https://ouraring.com/blog/how-accurate-is-oura/"
      }
    },
    {
      "name": "Personal Info Routes",
      "description": "The Personal Info scope includes personal information (e.g. age, email, weight, and height) about the user. You can access the id on the personal_info route with any access token (no scopes are required)."
    },
    {
      "name": "Rest Mode Period Routes",
      "description": "The Rest Mode scope includes information about rest mode periods. This includes the start, end time and detaials of the rest mode period."
    },
    {
      "name": "Ring Configuration Routes",
      "description": "The Ring Configuration scope includes information about the user's ring(s). This includes the model, size, color, etc."
    },
    {
      "name": "Session Routes",
      "description": "The Sessions data scope provides information on how users engage with guided and unguided sessions in the Oura app, including the user's biometric trends during the sessions.",
      "externalDocs": {
        "description": "Learn about the available session types within the Explore Tab",
        "url": "https://ouraring.com/blog/oura-explore-tab/"
      }
    },
    {
      "name": "Sleep Routes",
      "description": "Returns Oura Sleep data for the specified Oura user within a given timeframe. A user can have multiple sleep periods per day."
    },
    {
      "name": "Sleep Time Routes",
      "description": "Recommendations for the optimal bedtime window that is calculated based on sleep data."
    },
    {
      "name": "Tag Routes",
      "description": "<span className='text-important'>**Note:** Tag is deprecated. We recommend transitioning to [Enhanced Tag](#tag/Enhanced-Tag-Routes).</span>\n\n~~The Tags data scope includes tags that Oura users enter within the Oura mobile app. Tags are a growing list of activities, environment factors, symptoms, emotions, and other aspects that provide broader context into what's happening with users beyond the objective data generated by the Oura Ring.~~\n\n~~[More information on tag translations](https://cloud.ouraring.com/edu/tag-translations)~~"
    },
    {
      "name": "VO2 Max Routes",
      "description": "VO2 Max is a measure of the maximum volume of oxygen that an individual can use during intense exercise. See more details [here](https://support.ouraring.com/hc/en-us/articles/28336620578835-Cardio-Capacity-VO2-Max)."
    },
    {
      "name": "Workout Routes",
      "description": "The Workout data scope includes information about user workouts. This is a diverse, growing list of workouts that help inform how the user is training and exercising."
    },
    {
      "name": "Sandbox Routes",
      "description": "Fake user data that you can access without an Oura account. There is a corresponding sandbox endpoint to each available data type. This is useful for testing and development purposes. The data is not real and should not be used for any production purposes. The data is generated by Oura and is not based on any real user data. The data is not updated in real-time and is not guaranteed to be accurate. The rate limit for the sandbox endpoints is shared with your rate limit on other data endpoints."
    },
    {
      "name": "Webhook Subscription Routes",
      "description": "# Webhooks for Real-Time Data Updates\n\n## What are Webhooks?\nWebhooks are a way for the Oura API to notify your application when new data is available, instead of requiring your application to constantly check for updates (polling). Think of webhooks as \"reverse APIs\" - instead of your application requesting data, Oura's servers send data to your application when something changes.\n\n## Why Use Webhooks (Important!)\n- **RECOMMENDED APPROACH**: Webhooks are the preferred way to consume Oura data\n- **Avoid Rate Limits**: We have not had customers hit rate limits with webhooks properly implemented\n- **Near Real-Time Updates**: Webhook notifications come approximately 30 seconds after data syncs from the mobile app\n- **Efficient Resource Usage**: Reduces unnecessary API calls and server load\n- **Better User Experience**: Your application stays updated without constant polling\n\n## How Webhooks Work with Oura\n1. **You set up an endpoint**: Create a URL on your server that can receive POST requests\n2. **You subscribe to events**: Tell Oura what data types and events you want to be notified about\n3. **Oura verifies your endpoint**: A one-time check to ensure your endpoint is valid\n4. **Oura sends notifications**: When data changes, Oura sends a POST request to your endpoint\n5. **You process the event**: Your endpoint receives basic event details\n6. **You fetch complete data**: Use the provided IDs to retrieve the full data via the API\n\n## Recommended Implementation Pattern\n1. **Initial Data Load**: When a user first connects, make a single API request for historical data\n2. **Subscribe to Webhooks**: Set up webhook subscriptions for all data types you need\n3. **Process Webhook Events**: As users sync their rings, you'll receive notifications about new data\n4. **Fetch Updated Data**: Use the object_id from webhook events to fetch the specific updated data\n\nThis pattern minimizes API calls while ensuring your application always has the latest data.\n\n## Setup Guide\n\n### Step 1: Create Your Webhook Endpoint\nSet up an HTTP endpoint on your server that can:\n- Handle both GET requests (for verification) and POST requests (for events)\n- Respond to verification challenges during subscription setup\n- Process incoming webhook events quickly (under 10 seconds)\n\nExample endpoint implementation (Node.js):\n```javascript\n// Express.js route handlers for your webhook endpoint\napp.get('/oura-webhook', (req, res) => {\n  // Verification handler - required during subscription setup\n  const { verification_token, challenge } = req.query;\n\n  // Verify the token matches your expected token\n  if (verification_token === YOUR_VERIFICATION_TOKEN) {\n    // Return the challenge in the required format\n    return res.json({ challenge });\n  }\n\n  // If verification fails\n  return res.status(401).send('Invalid verification token');\n});\n\napp.post('/oura-webhook', (req, res) => {\n  // Event handler - processes incoming webhook events\n\n  // Always respond quickly (under 10 seconds)\n  // Process the event asynchronously if needed\n  res.status(200).send('OK');\n\n  // Then process the event data\n  const { event_type, data_type, object_id, user_id } = req.body;\n  processEventAsync(event_type, data_type, object_id, user_id);\n});\n```\n\n### Step 2: Create a Webhook Subscription\nCall the `POST /v2/webhook/subscription` endpoint to register your webhook:\n\n```\nPOST /v2/webhook/subscription\nHeaders:\n  x-client-id: YOUR_CLIENT_ID\n  x-client-secret: YOUR_CLIENT_SECRET\n  Content-Type: application/json\n\nBody:\n{\n  \"callback_url\": \"https://your-server.com/oura-webhook\",\n  \"verification_token\": \"your-secret-verification-token\",\n  \"event_type\": \"update\",\n  \"data_type\": \"sleep\"\n}\n```\n\nYou need to create separate subscriptions for each combination of:\n- **event_type**: The type of event (create, update, delete)\n- **data_type**: The type of data you're interested in (sleep, activity, etc.)\n\n### Step 3: Verification Process\nWhen you create a subscription, Oura verifies your endpoint:\n\n1. Oura sends a GET request to your callback URL with query parameters:\n   ```\n   GET https://your-server.com/oura-webhook?verification_token=your-token&challenge=random-string\n   ```\n\n2. Your endpoint must verify the token and respond with the challenge:\n   ```json\n   {\n     \"challenge\": \"random-string\"\n   }\n   ```\n\n3. If verification succeeds, your subscription is activated\n\n![Verification Flow](/img/webhook-verification-flow-diagram.drawio.png)\n\n### Step 4: Receiving and Processing Events\nWhen an event occurs (e.g., user syncs new sleep data):\n\n1. Oura sends a POST request to your callback URL:\n   ```\n   POST https://your-server.com/oura-webhook\n   Headers:\n     x-oura-signature: HMAC_SIGNATURE\n     x-oura-timestamp: 1234567890\n\n   Body:\n   {\n     \"event_type\": \"update\",\n     \"data_type\": \"sleep\",\n     \"object_id\": \"12345abc\",\n     \"event_time\": \"2023-01-01T08:00:00+00:00\",\n     \"user_id\": \"user123\"\n   }\n   ```\n\n2. Your endpoint should:\n   - Verify the signature for security (see below)\n   - Respond quickly (under 10 seconds) with a 2xx status\n   - Process the event asynchronously if needed\n   - Use the object_id to fetch the complete data via the API\n\n## Security Best Practices\n\n### Verify Webhook Signatures\nAlways verify that webhook requests are actually from Oura by checking the HMAC signature:\n\n```javascript\nconst crypto = require('crypto');\n\nfunction verifySignature(headers, body, clientSecret) {\n  const signature = headers['x-oura-signature'];\n  const timestamp = headers['x-oura-timestamp'];\n\n  // Create HMAC using your client secret\n  const hmac = crypto.createHmac('sha256', clientSecret);\n  hmac.update(timestamp + JSON.stringify(body));\n  const calculatedSignature = hmac.digest('hex').toUpperCase();\n\n  // Compare calculated signature with received signature\n  return calculatedSignature === signature;\n}\n\n// In your webhook handler\napp.post('/oura-webhook', (req, res) => {\n  // Verify signature\n  if (!verifySignature(req.headers, req.body, CLIENT_SECRET)) {\n    return res.status(401).send('Invalid signature');\n  }\n\n  // Process valid webhook\n  res.status(200).send('OK');\n  // ...\n});\n```\n\n### Use HTTPS\nAlways use HTTPS for your webhook endpoint to ensure data is encrypted in transit.\n\n### Keep Your Verification Token Secret\nChoose a strong, random verification token and don't share it.\n\n## Handling Webhook Failures\n\n### Retry Mechanism\nOura will retry failed webhook deliveries:\n- For 4xx responses: 10 retries\n- For 5xx responses: 10 retries\n- For timeouts: 10 retries\n\n### Canceling Subscriptions\nIf you want to cancel a subscription, you can:\n- Use the DELETE endpoint: `DELETE /v2/webhook/subscription/{id}`\n- Or respond with a 410 status code to automatically cancel\n\n## Common Questions\n\n### How quickly will I receive webhooks?\nWebhook notifications arrive approximately 30 seconds after data syncs from the mobile app. The timing depends on the data type:\n- **Sleep, Readiness, and other user-initiated sync data**: These only sync when the user opens the Oura app and actively syncs their ring\n- **Daily Activity, Daily Stress, and other background data**: These may update periodically in the background without user action\n\n### What if my server goes down?\nOura will retry webhook deliveries for about an hour if your server doesn't respond properly. However, if your server is down for an extended period, you might miss some events. It's a good practice to implement a reconciliation process that can fetch data for periods when your webhook might have been unavailable.\n\n### How can I test webhooks locally?\nUse a tool like [ngrok](https://ngrok.com/) to expose your local development server to the internet with a public URL.\n\n### Can I use the same callback URL for different subscriptions?\nYes, you can use the same URL for multiple subscriptions. Your handler can differentiate between events using the `event_type` and `data_type` fields in the webhook payload.\n\n### Will I hit rate limits using webhooks?\nWe have not had customers hit rate limits with webhooks properly implemented. The recommended pattern is:\n1. Make a single request for historical data when a user first connects\n2. Use webhooks for all ongoing data updates\n3. Only fetch the specific data that has changed based on webhook notifications\n\nThis approach minimizes API calls while ensuring your application always has the latest data.\n        "
    }
  ]
}