Oura Personal Info API

Retrieve the authenticated user's Oura profile including age, weight, height, biological sex, and email via /v2/usercollection/personal_info. Returned with the personal scope and represents the static profile metadata associated with the Oura account.

Oura Personal Info API is one of 9 APIs that Oura publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include Health, Personal Info, User, and Wearables. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, and 1 Naftiko capability spec.

OpenAPI Specification

oura-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Oura API
  version: '2.0'
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''
          \

          --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
      - name: fields
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: N/A. This route does not support field selection yet, all fields
            will be returned.
          title: Fields
        description: N/A. This route does not support field selection yet, all fields
          will be returned.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/MultiDocumentResponse_TagModel_'
                - $ref: '#/components/schemas/MultiDocumentResponseDict'
                title: Response Multiple Tag Documents V2 Usercollection Tag Get
        '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.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      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''
          \

          --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:
                anyOf:
                - $ref: '#/components/schemas/MultiDocumentResponse_TagModel_'
                - $ref: '#/components/schemas/MultiDocumentResponseDict'
                title: Response Sandbox   Multiple Tag Documents V2 Sandbox Usercollection
                  Tag Get
        '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.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      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''
          \

          --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
      - name: fields
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: N/A. This route does not support field selection yet, all fields
            will be returned.
          title: Fields
        description: N/A. This route does not support field selection yet, all fields
          will be returned.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/MultiDocumentResponse_EnhancedTagModel_'
                - $ref: '#/components/schemas/MultiDocumentResponseDict'
                title: Response Multiple Enhanced Tag Documents V2 Usercollection
                  Enhanced Tag Get
        '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.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      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''
          \

          --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:
                anyOf:
                - $ref: '#/components/schemas/MultiDocumentResponse_EnhancedTagModel_'
                - $ref: '#/components/schemas/MultiDocumentResponseDict'
                title: Response Sandbox   Multiple Enhanced Tag Documents V2 Sandbox
                  Usercollection Enhanced Tag Get
        '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.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      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''
          \

          --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
      - name: fields
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Comma-separated list of fields to include in the response,
            in addition to the always returned fields. Defaults to all fields if not
            provided.
          title: Fields
        description: Comma-separated list of fields to include in the response, in
          addition to the always returned fields. Defaults to all fields if not provided.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/MultiDocumentResponse_PublicWorkout_'
                - $ref: '#/components/schemas/MultiDocumentResponseDict'
                title: Response Multiple Workout Documents V2 Usercollection Workout
                  Get
        '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.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      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&fields=day,score''
          \

          --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\
          \    'fields': 'day,score' \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&fields=day,score',\
          \ 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&fields=day,score\"\
          ) \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:
                anyOf:
                - $ref: '#/components/schemas/MultiDocumentResponse_PublicWorkout_'
                - $ref: '#/components/schemas/MultiDocumentResponseDict'
                title: Response Sandbox   Multiple Workout Documents V2 Sandbox Usercollection
                  Workout Get
        '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.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      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&fields=day,score''
          \

          --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\
          \    'fields': 'day,score' \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&fields=day,score',\
          \ 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&fields=day,score\"\
          ) \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
      - name: fields
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Comma-separated list of fields to include in the response,
            in addition to the always returned fields. Defaults to all fields if not
            provided.
          title: Fields
        description: Comma-separated list of fields to include in the response, in
          addition to the always returned fields. Defaults to all fields if not provided.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/MultiDocumentResponse_PublicSession_'
                - $ref: '#/components/schemas/MultiDocumentResponseDict'
                title: Response Multiple Session Documents V2 Usercollection Session
                  Get
        '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.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      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&fields=day,score''
          \

          --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\
          \    'fields': 'day,score' \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&fields=day,score',\
          \ 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&fields=day,score\"\
          ) \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:
                anyOf:
                - $ref: '#/components/schemas/MultiDocumentResponse_PublicSession_'
                - $ref: '#/components/schemas/MultiDocumentResponseDict'
                title: Response Sandbox   Multiple Session Documents V2 Sandbox Usercollection
                  Session Get
        '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.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/sc

# --- truncated at 32 KB (316 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/oura-ring/refs/heads/main/openapi/oura-api-openapi.yml