<!-- BusyBot node reference — https://busybot.net/tools/oura/ -->

> Node: Oura (`oura`) · Action · v1
> Category: Productivity · Credentials: Oura API (`ouraApi`)
> Updated: 2026-08-16

# Oura

> Retrieve health data from the Oura Ring API

## Overview

Oura is a health and wellness ring that tracks sleep, activity, and readiness. This tool retrieves data from the Oura Ring API v2, providing access to the user's personal profile information and daily summaries for activity, readiness, and sleep. All operations are read-only GET requests. Uses Bearer Token authentication with a Personal Access Token obtained from the Oura developer portal.

**Category:** Productivity  
**Tool Name:** `oura`  
**Version:** 1

**Appearance:** Icon: `lucide-Activity` | Color: `#2D2D2D`

## Node Type

**Action** — processes input items and produces output

## Input / Output

| Direction | Port(s) |
|-----------|--------|
| Input | `Input` |
| Output | `Output`, `Error` |

## Credentials

This tool requires **Oura API** credentials.
See the [Credentials Guide](https://busybot.net/credentials/oura-api/) for setup instructions.

### Resources

| Resource | Value |
|----------|-------|
| Profile | `profile` |
| Summary | `summary` |

### Operations

**Profile** (`profile`)

| Operation | Value | Description |
|-----------|-------|-------------|
| Get | `get` | Get the user's personal information |

**Summary** (`summary`)

| Operation | Value | Description |
|-----------|-------|-------------|
| Get Activity Summary | `getActivity` | Get the user's activity summary |
| Get Readiness Summary | `getReadiness` | Get the user's readiness summary |
| Get Sleep Periods | `getSleep` | Get the user's sleep summary |

### Parameters

`Profile: Get` takes no parameters of its own — see All Operations.

#### Summary: Get Activity Summary

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `5` | Max number of results to return. Accepts values from 1 to 10. _(shown when Return All is `false`)_ |
| Filters | `collection` | No | `{}` | Optional date range applied to the summary request. |
| — End Date | `dateTime` | No | — | End date for the summary retrieval. If omitted, it defaults to the current day. |
| — Start Date | `dateTime` | No | — | Start date for the summary retrieval. If omitted, it defaults to a week ago. |

#### Summary: Get Readiness Summary

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `5` | Max number of results to return. Accepts values from 1 to 10. _(shown when Return All is `false`)_ |
| Filters | `collection` | No | `{}` | Optional date range applied to the summary request. |
| — End Date | `dateTime` | No | — | End date for the summary retrieval. If omitted, it defaults to the current day. |
| — Start Date | `dateTime` | No | — | Start date for the summary retrieval. If omitted, it defaults to a week ago. |

#### Summary: Get Sleep Periods

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `5` | Max number of results to return. Accepts values from 1 to 10. _(shown when Return All is `false`)_ |
| Filters | `collection` | No | `{}` | Optional date range applied to the summary request. |
| — End Date | `dateTime` | No | — | End date for the summary retrieval. If omitted, it defaults to the current day. |
| — Start Date | `dateTime` | No | — | Start date for the summary retrieval. If omitted, it defaults to a week ago. |

#### All Operations

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Max Concurrency | `number` | No | `10` | Maximum number of items to process concurrently. |

## Output Data

Each returned record is merged into the item JSON at the top level, so the incoming item's own fields pass through alongside the health data and binary data on the input item is forwarded unchanged.

- **`Profile: Get`** returns a single record, so one input item produces exactly one output item.
- **The three Summary operations fan out** — `getActivity`, `getReadiness` and `getSleep` each return a collection of daily records, and the node emits **one output item per daily record**. Ten days of sleep summaries from a single input item become ten output items.
- **Empty ranges are not silently dropped.** When a Summary operation matches no records at all, the node still emits one item: the input item's JSON with `_ouraNoResults: true` added. Check for that flag before treating a downstream item as real health data.

`Return All` and `Limit` only affect the Summary operations. With `Return All` on, every record in the requested range is emitted; with it off, the records are trimmed to `Limit` (at most 10) before they are turned into items. `Start Date` and `End Date` narrow the range that is requested in the first place.

Reference a returned field downstream by expression — the daily record's fields sit directly on the item, so `{{ $json.fieldName }}` addresses them, and `{{ $json._ouraNoResults }}` tells you the range came back empty.

## Usage Examples

- Get the user's Oura Ring profile information
- Get the last 7 days of sleep summaries
- Retrieve all activity data for a specific date range
- Get readiness scores from January 2024
- Fetch daily sleep data from the Oura Ring

## Example Configuration

Read the ring owner's profile:

```json
{
  "type": "oura",
  "parameters": {
    "resource": "profile",
    "operation": "get"
  }
}
```

Pull every activity summary in a date range:

```json
{
  "type": "oura",
  "parameters": {
    "resource": "summary",
    "operation": "getActivity",
    "returnAll": true,
    "filters": {
      "start": "2024-01-01T00:00:00Z",
      "end": "2024-01-31T23:59:59Z"
    }
  }
}
```

Cap a sleep query to a fixed number of days:

```json
{
  "type": "oura",
  "parameters": {
    "resource": "summary",
    "operation": "getSleep",
    "returnAll": false,
    "limit": 10,
    "filters": {
      "start": "2024-01-01T00:00:00Z",
      "end": "2024-01-31T23:59:59Z"
    }
  }
}
```

Fetch readiness scores without a date filter, letting the API pick the default window:

```json
{
  "type": "oura",
  "parameters": {
    "resource": "summary",
    "operation": "getReadiness",
    "returnAll": true
  }
}
```

Retrieve the last seven days of sleep data:

```json
{
  "type": "oura",
  "parameters": {
    "resource": "summary",
    "operation": "getSleep",
    "returnAll": false,
    "limit": 7,
    "filters": {
      "start": "2024-01-24T00:00:00Z",
      "end": "2024-01-31T23:59:59Z"
    }
  }
}
```

Build a monthly activity report, throttling how many input items are handled at once:

```json
{
  "type": "oura",
  "parameters": {
    "resource": "summary",
    "operation": "getActivity",
    "returnAll": true,
    "filters": {
      "start": "2024-01-01T00:00:00Z",
      "end": "2024-01-31T23:59:59Z"
    },
    "maxConcurrency": 5
  }
}
```

Run a single profile check with concurrency pinned to one:

```json
{
  "type": "oura",
  "parameters": {
    "resource": "profile",
    "operation": "get",
    "maxConcurrency": 1
  }
}
```

### Error Handling

| Mode | Behavior |
|------|----------|
| **stop** | Halts workflow on first error |
| **continue** | Skips failed items, passes successful ones through |
| **errorPort** | Routes failed items to Error output port |

## Tips

Retrieve health data (profile, activity, readiness, sleep) from the Oura Ring API.