Oura Ring Health Data
You have access to the user's Oura Ring data through the oura_data tool. Use it to answer health questions and deliver scheduled summaries.
Endpoint Reference
Core (used in daily summaries)
| Endpoint |
Returns |
Key Fields |
daily_sleep |
Sleep score & contributors |
score, contributors.deep_sleep, .efficiency, .rem_sleep, .restfulness, .total_sleep |
daily_readiness |
Readiness score & contributors |
score, contributors.hrv_balance, .resting_heart_rate, .recovery_index, .sleep_balance |
daily_activity |
Activity score & metrics |
score, steps, active_calories, total_calories, high_activity_time, medium_activity_time |
sleep |
Detailed sleep periods |
duration, total_sleep_duration, deep_sleep_duration, rem_sleep_duration, light_sleep_duration, efficiency, average_heart_rate, lowest_heart_rate, average_hrv, bedtime_start, bedtime_end |
daily_stress |
Stress summary |
stress_high, recovery_high, day_summary |
Additional (available for ad-hoc queries)
| Endpoint |
Returns |
Key Fields |
heartrate |
Continuous heart rate samples |
bpm, source, timestamp |
daily_spo2 |
Blood oxygen levels |
spo2_percentage, breathing_disturbance_index |
workout |
Workout sessions |
activity, calories, duration, distance, intensity, start_datetime, end_datetime |
session |
Mindfulness/breathing sessions |
type, mood, duration, heart_rate, hrv |
enhanced_tag |
User-created tags |
tag_type_code, comment, timestamp |
daily_cardiovascular_age |
Cardiovascular age estimate |
vascular_age |
daily_resilience |
Resilience score & contributors |
level, contributors.sleep_recovery, .daytime_recovery, .stress |
vO2_max |
VO2 max estimate |
vo2_max, timestamp |
rest_mode_period |
Rest mode periods |
start_day, end_day, episodes |
sleep_time |
Recommended sleep times |
recommendation, status, ideal_bedtime_start, ideal_bedtime_end |
ring_configuration |
Ring hardware info |
color, design, firmware_version, hardware_type, set_up_at, size |
personal_info |
User profile |
age, weight, height, biological_sex, email |
tag |
Tags (deprecated, use enhanced_tag) |
tag_type_code, timestamp |
Usage Instructions
- Date defaults: If no dates specified, the tool defaults to today's data. Use
start_date and end_date in YYYY-MM-DD format for specific ranges.
- Multi-endpoint queries: For comprehensive answers, call multiple endpoints. E.g., "How did I sleep?" should fetch both
daily_sleep (score) and sleep (details).
- Duration conversion: Sleep/activity durations are in seconds. Convert to hours and minutes:
27360s → 7h 36m.
- Null values: Some fields may be
null if Oura hasn't computed them yet. Note this gracefully rather than showing "null".
Score Interpretation
| Range |
Label |
| 85+ |
Excellent |
| 70–84 |
Good |
| 60–69 |
Fair |
| Below 60 |
Needs attention |
Formatting Guidelines
- Use concise bullet points, not long paragraphs
- Lead with scores and labels (e.g., "Sleep: 82 (Good)")
- Include 2–3 key contributor details per category
- Convert all durations from seconds to Xh Ym format
- Add brief, personalized context when relevant (e.g., "HRV is trending lower than usual")
- Keep summaries scannable — the user may be reading on a phone
- Adapt formatting to the delivery channel — see Channel Formatting Guide below
Channel Formatting Guide
Different messaging channels support different formatting syntax. Use the correct format for the delivery channel. When the channel is unknown or "default", use plain text formatting (safe everywhere).
Plain text — iMessage (bluebubbles), Signal
No text-based formatting syntax is supported. Characters like *, _, and ~ appear literally.
- Use emoji and whitespace for visual structure
- Use UPPERCASE sparingly for emphasis if needed (e.g., "SLEEP: 82")
- URLs are auto-linked — just include them as plain text
- Use
| or · as inline separators
- Use
— (em dash) for inline breaks
WhatsApp
- Bold:
*text*
- Italic:
_text_
- Strikethrough:
~text~
- Inline code:
`text`
- Lists:
- item at the start of a line
- URLs are auto-linked — do NOT use markdown link syntax
[text](url)
Telegram
Supports Markdown-style formatting:
- Bold:
*text*
- Italic:
_text_
- Underline:
__text__
- Strikethrough:
~text~
- Links:
[display text](url)
- Escape special characters (
., -, (, ), !, etc.) with \ when they appear outside formatting
Slack
Uses Slack's mrkdwn syntax (not standard Markdown):
- Bold:
*text*
- Italic:
_text_
- Strikethrough:
~text~
- Links:
<url|display text>
- Lists:
- item or • item
- Do NOT use standard Markdown bold (
**text**) or link syntax ([text](url))
Discord
Uses standard Markdown:
- Bold:
**text**
- Italic:
*text*
- Underline:
__text__
- Strikethrough:
~~text~~
- Links:
[display text](url)
- Lists:
- item
- Headers:
#, ##, ### (at start of line)
WebChat / Default
Use standard Markdown formatting.
Scheduled Summary Delivery
When producing a scheduled summary (morning or evening), follow these rules:
- Read the template carefully and follow every format rule, including all specified data points, line counts, and examples.
- Send the complete formatted summary as a single message to the channel and target specified in the request. Do not summarize, abbreviate, or rephrase the summary.
- Apply channel-appropriate formatting using the Channel Formatting Guide above based on the channel specified in the request.
Morning Summary Template
When delivering a morning summary, fetch daily_sleep, sleep (detailed periods), daily_readiness, daily_activity, and daily_stress for today. Also fetch yesterday's daily_activity as a fallback.
Send only the formatted summary — no preamble, intro message, or extra commentary before or after it. Apply the correct formatting syntax for the delivery channel (see Channel Formatting Guide).
Format rules:
- Start with "Good morning!" and today's date
- Sleep: score with label, total sleep time (convert seconds to Xh Ym), key contributors that are notably high or low. From the detailed
sleep endpoint, include lowest resting heart rate, average overnight heart rate, and average HRV. Show deep, REM, and light durations in minutes.
- Readiness: score with label, body temperature deviation, HRV balance, recovery index. Call out anything that's dragging the score down.
- Activity: use today's
daily_activity if available (score, steps, active calories). If score is null or data is missing, use yesterday's activity instead and note that it's yesterday's data.
- Stress: mention if data is available (normal, high, etc.). If no stress data, skip it.
- End with: "Dive deeper in the Oura app: https://cloud.ouraring.com/app/v1/home — enjoy your day!" (include trailing text after the URL so it renders inline, not as a separate link preview).
- Keep it concise — 8–10 lines max. Use emoji sparingly. Warm but not cheesy.
- Bold the category labels and scores on channels that support bold (e.g.,
*Sleep: 82 (Good)* on WhatsApp/Telegram/Slack, **Sleep: 82 (Good)** on Discord). On plain text channels (iMessage, Signal), do not use any formatting markers.
Example tone (plain text / iMessage):
Good morning! Here's your recap for Monday, Jan 27.
😴 Sleep: 82 (Good) — 7h 12m total
Deep 58m | REM 1h 24m | Light 4h 50m
Lowest HR 52 bpm | Avg HR 58 bpm | HRV 42 ms
💪 Readiness: 78 (Good)
Body temp +0.1°C | HRV balance solid | Recovery index slightly low
🏃 Activity (yesterday): 74 (Good) — 8,241 steps, 312 active cal
Stress: normal range
Solid night overall — deep sleep was a bit short but REM made up for it.
Dive deeper in the Oura app: https://cloud.ouraring.com/app/v1/home — enjoy your day!
Example tone (WhatsApp / Telegram / Slack):
Good morning! Here's your recap for Monday, Jan 27.
😴 *Sleep: 82 (Good)* — 7h 12m total
Deep 58m | REM 1h 24m | Light 4h 50m
Lowest HR 52 bpm | Avg HR 58 bpm | HRV 42 ms
💪 *Readiness: 78 (Good)*
Body temp +0.1°C | HRV balance solid | Recovery index slightly low
🏃 *Activity (yesterday): 74 (Good)* — 8,241 steps, 312 active cal
Stress: normal range
Solid night overall — deep sleep was a bit short but REM made up for it.
Dive deeper in the Oura app: https://cloud.ouraring.com/app/v1/home — enjoy your day!
Evening Summary Template
When delivering an evening summary, fetch daily_activity, daily_readiness, daily_stress, and daily_sleep for today. Also fetch yesterday's daily_activity as a fallback in case today's data isn't available yet.
Send only the formatted summary — no preamble, intro message, or extra commentary before or after it. Apply the correct formatting syntax for the delivery channel (see Channel Formatting Guide).
Format rules:
- Start with "Good evening!" and today's date
- Focus on today's activity: score, steps, active calories, total calories. If today's activity score is null or data is missing, use yesterday's activity instead and note that it's yesterday's data. Activity data must always be included — never show "pending" or skip it.
- Include today's readiness and stress.
- Briefly mention last night's sleep score as a one-line recap.
- End with a short, genuine motivational nudge to wind down, then: "Dive deeper in the Oura app: https://cloud.ouraring.com/app/v1/home — sleep well!" (include trailing text after the URL so it renders inline).
- Keep it concise — 6–8 lines max. Use emoji sparingly.
- Bold the category labels and scores on channels that support bold. On plain text channels (iMessage, Signal), do not use any formatting markers.
Example tone (plain text / iMessage):
Good evening! Here's your day in review for Monday, Jan 27.
🏃 Activity: 81 (Good) — 9,432 steps, 387 active cal, 2,145 total cal
📊 Readiness: 78 (Good) | Stress: normal range
😴 Last night's sleep: 82 (Good)
Nice active day — you moved well. Wind down soon and aim for a solid bedtime to keep the momentum going.
Dive deeper in the Oura app: https://cloud.ouraring.com/app/v1/home — sleep well!
Example tone (WhatsApp / Telegram / Slack):
Good evening! Here's your day in review for Monday, Jan 27.
🏃 *Activity: 81 (Good)* — 9,432 steps, 387 active cal, 2,145 total cal
📊 *Readiness: 78 (Good)* | Stress: normal range
😴 *Last night's sleep: 82 (Good)*
Nice active day — you moved well. Wind down soon and aim for a solid bedtime to keep the momentum going.
Dive deeper in the Oura app: https://cloud.ouraring.com/app/v1/home — sleep well!
Ad-hoc Query Mapping
Map natural language to endpoints:
| User says |
Fetch |
| "How did I sleep?" / "Sleep report" |
daily_sleep + sleep |
| "Am I ready to work out?" / "Readiness" |
daily_readiness |
| "How active was I?" / "Steps today" |
daily_activity |
| "Stress levels" |
daily_stress |
| "Full health summary" |
All endpoints |
| "Last week's sleep" / "trends" |
daily_sleep with 7-day date range |
| "Compare this week to last" |
Two date ranges, summarize differences |
When the user asks about trends or comparisons, fetch the relevant date range and summarize the pattern (improving, declining, stable) with specific numbers.
Source: rickybloomfield/OuraClaw — distributed by TomeVault.
1---2name: oura3description: Oura Ring health data — sleep, readiness, activity, and stress Use when this capability is needed.4---56# Oura Ring Health Data78You have access to the user's Oura Ring data through the `oura_data` tool. Use it to answer health questions and deliver scheduled summaries.910## Endpoint Reference1112### Core (used in daily summaries)1314| Endpoint | Returns | Key Fields |15|----------|---------|------------|16| `daily_sleep` | Sleep score & contributors | `score`, `contributors.deep_sleep`, `.efficiency`, `.rem_sleep`, `.restfulness`, `.total_sleep` |17| `daily_readiness` | Readiness score & contributors | `score`, `contributors.hrv_balance`, `.resting_heart_rate`, `.recovery_index`, `.sleep_balance` |18| `daily_activity` | Activity score & metrics | `score`, `steps`, `active_calories`, `total_calories`, `high_activity_time`, `medium_activity_time` |19| `sleep` | Detailed sleep periods | `duration`, `total_sleep_duration`, `deep_sleep_duration`, `rem_sleep_duration`, `light_sleep_duration`, `efficiency`, `average_heart_rate`, `lowest_heart_rate`, `average_hrv`, `bedtime_start`, `bedtime_end` |20| `daily_stress` | Stress summary | `stress_high`, `recovery_high`, `day_summary` |2122### Additional (available for ad-hoc queries)2324| Endpoint | Returns | Key Fields |25|----------|---------|------------|26| `heartrate` | Continuous heart rate samples | `bpm`, `source`, `timestamp` |27| `daily_spo2` | Blood oxygen levels | `spo2_percentage`, `breathing_disturbance_index` |28| `workout` | Workout sessions | `activity`, `calories`, `duration`, `distance`, `intensity`, `start_datetime`, `end_datetime` |29| `session` | Mindfulness/breathing sessions | `type`, `mood`, `duration`, `heart_rate`, `hrv` |30| `enhanced_tag` | User-created tags | `tag_type_code`, `comment`, `timestamp` |31| `daily_cardiovascular_age` | Cardiovascular age estimate | `vascular_age` |32| `daily_resilience` | Resilience score & contributors | `level`, `contributors.sleep_recovery`, `.daytime_recovery`, `.stress` |33| `vO2_max` | VO2 max estimate | `vo2_max`, `timestamp` |34| `rest_mode_period` | Rest mode periods | `start_day`, `end_day`, `episodes` |35| `sleep_time` | Recommended sleep times | `recommendation`, `status`, `ideal_bedtime_start`, `ideal_bedtime_end` |36| `ring_configuration` | Ring hardware info | `color`, `design`, `firmware_version`, `hardware_type`, `set_up_at`, `size` |37| `personal_info` | User profile | `age`, `weight`, `height`, `biological_sex`, `email` |38| `tag` | Tags (deprecated, use `enhanced_tag`) | `tag_type_code`, `timestamp` |3940## Usage Instructions4142- **Date defaults**: If no dates specified, the tool defaults to today's data. Use `start_date` and `end_date` in `YYYY-MM-DD` format for specific ranges.43- **Multi-endpoint queries**: For comprehensive answers, call multiple endpoints. E.g., "How did I sleep?" should fetch both `daily_sleep` (score) and `sleep` (details).44- **Duration conversion**: Sleep/activity durations are in **seconds**. Convert to hours and minutes: `27360s` → `7h 36m`.45- **Null values**: Some fields may be `null` if Oura hasn't computed them yet. Note this gracefully rather than showing "null".4647## Score Interpretation4849| Range | Label |50|-------|-------|51| 85+ | Excellent |52| 70–84 | Good |53| 60–69 | Fair |54| Below 60 | Needs attention |5556## Formatting Guidelines5758- Use concise bullet points, not long paragraphs59- Lead with scores and labels (e.g., "Sleep: 82 (Good)")60- Include 2–3 key contributor details per category61- Convert all durations from seconds to Xh Ym format62- Add brief, personalized context when relevant (e.g., "HRV is trending lower than usual")63- Keep summaries scannable — the user may be reading on a phone64- **Adapt formatting to the delivery channel** — see Channel Formatting Guide below6566## Channel Formatting Guide6768Different messaging channels support different formatting syntax. Use the correct format for the delivery channel. When the channel is unknown or "default", use plain text formatting (safe everywhere).6970### Plain text — iMessage (bluebubbles), Signal7172No text-based formatting syntax is supported. Characters like `*`, `_`, and `~` appear literally.7374- Use emoji and whitespace for visual structure75- Use UPPERCASE sparingly for emphasis if needed (e.g., "SLEEP: 82")76- URLs are auto-linked — just include them as plain text77- Use `|` or `·` as inline separators78- Use `—` (em dash) for inline breaks7980### WhatsApp8182- **Bold**: `*text*`83- **Italic**: `_text_`84- **Strikethrough**: `~text~`85- **Inline code**: `` `text` ``86- **Lists**: `- item` at the start of a line87- URLs are auto-linked — do NOT use markdown link syntax `[text](url)`8889### Telegram9091Supports Markdown-style formatting:9293- **Bold**: `*text*`94- **Italic**: `_text_`95- **Underline**: `__text__`96- **Strikethrough**: `~text~`97- **Links**: `[display text](url)`98- Escape special characters (`.`, `-`, `(`, `)`, `!`, etc.) with `\` when they appear outside formatting99100### Slack101102Uses Slack's mrkdwn syntax (not standard Markdown):103104- **Bold**: `*text*`105- **Italic**: `_text_`106- **Strikethrough**: `~text~`107- **Links**: `<url|display text>`108- **Lists**: `- item` or `• item`109- Do NOT use standard Markdown bold (`**text**`) or link syntax (`[text](url)`)110111### Discord112113Uses standard Markdown:114115- **Bold**: `**text**`116- **Italic**: `*text*`117- **Underline**: `__text__`118- **Strikethrough**: `~~text~~`119- **Links**: `[display text](url)`120- **Lists**: `- item`121- **Headers**: `#`, `##`, `###` (at start of line)122123### WebChat / Default124125Use standard Markdown formatting.126127## Scheduled Summary Delivery128129When producing a scheduled summary (morning or evening), follow these rules:130131- **Read the template carefully** and follow every format rule, including all specified data points, line counts, and examples.132- **Send the complete formatted summary as a single message** to the channel and target specified in the request. Do not summarize, abbreviate, or rephrase the summary.133- **Apply channel-appropriate formatting** using the Channel Formatting Guide above based on the channel specified in the request.134135## Morning Summary Template136137When delivering a morning summary, fetch `daily_sleep`, `sleep` (detailed periods), `daily_readiness`, `daily_activity`, and `daily_stress` for today. Also fetch yesterday's `daily_activity` as a fallback.138139Send only the formatted summary — no preamble, intro message, or extra commentary before or after it. Apply the correct formatting syntax for the delivery channel (see Channel Formatting Guide).140141Format rules:142- Start with "Good morning!" and today's date143- **Sleep**: score with label, total sleep time (convert seconds to Xh Ym), key contributors that are notably high or low. From the detailed `sleep` endpoint, include lowest resting heart rate, average overnight heart rate, and average HRV. Show deep, REM, and light durations in minutes.144- **Readiness**: score with label, body temperature deviation, HRV balance, recovery index. Call out anything that's dragging the score down.145- **Activity**: use today's `daily_activity` if available (score, steps, active calories). If score is null or data is missing, use yesterday's activity instead and note that it's yesterday's data.146- **Stress**: mention if data is available (normal, high, etc.). If no stress data, skip it.147- End with: "Dive deeper in the Oura app: https://cloud.ouraring.com/app/v1/home — enjoy your day!" (include trailing text after the URL so it renders inline, not as a separate link preview).148- Keep it concise — 8–10 lines max. Use emoji sparingly. Warm but not cheesy.149- Bold the category labels and scores on channels that support bold (e.g., `*Sleep: 82 (Good)*` on WhatsApp/Telegram/Slack, `**Sleep: 82 (Good)**` on Discord). On plain text channels (iMessage, Signal), do not use any formatting markers.150151Example tone (plain text / iMessage):152153```154Good morning! Here's your recap for Monday, Jan 27.155156😴 Sleep: 82 (Good) — 7h 12m total157Deep 58m | REM 1h 24m | Light 4h 50m158Lowest HR 52 bpm | Avg HR 58 bpm | HRV 42 ms159160💪 Readiness: 78 (Good)161Body temp +0.1°C | HRV balance solid | Recovery index slightly low162163🏃 Activity (yesterday): 74 (Good) — 8,241 steps, 312 active cal164165Stress: normal range166167Solid night overall — deep sleep was a bit short but REM made up for it.168169Dive deeper in the Oura app: https://cloud.ouraring.com/app/v1/home — enjoy your day!170```171172Example tone (WhatsApp / Telegram / Slack):173174```175Good morning! Here's your recap for Monday, Jan 27.176177😴 *Sleep: 82 (Good)* — 7h 12m total178Deep 58m | REM 1h 24m | Light 4h 50m179Lowest HR 52 bpm | Avg HR 58 bpm | HRV 42 ms180181💪 *Readiness: 78 (Good)*182Body temp +0.1°C | HRV balance solid | Recovery index slightly low183184🏃 *Activity (yesterday): 74 (Good)* — 8,241 steps, 312 active cal185186Stress: normal range187188Solid night overall — deep sleep was a bit short but REM made up for it.189190Dive deeper in the Oura app: https://cloud.ouraring.com/app/v1/home — enjoy your day!191```192193## Evening Summary Template194195When delivering an evening summary, fetch `daily_activity`, `daily_readiness`, `daily_stress`, and `daily_sleep` for today. Also fetch yesterday's `daily_activity` as a fallback in case today's data isn't available yet.196197Send only the formatted summary — no preamble, intro message, or extra commentary before or after it. Apply the correct formatting syntax for the delivery channel (see Channel Formatting Guide).198199Format rules:200- Start with "Good evening!" and today's date201- Focus on today's **activity**: score, steps, active calories, total calories. If today's activity score is null or data is missing, use yesterday's activity instead and note that it's yesterday's data. Activity data must always be included — never show "pending" or skip it.202- Include today's **readiness** and **stress**.203- Briefly mention last night's sleep score as a one-line recap.204- End with a short, genuine motivational nudge to wind down, then: "Dive deeper in the Oura app: https://cloud.ouraring.com/app/v1/home — sleep well!" (include trailing text after the URL so it renders inline).205- Keep it concise — 6–8 lines max. Use emoji sparingly.206- Bold the category labels and scores on channels that support bold. On plain text channels (iMessage, Signal), do not use any formatting markers.207208Example tone (plain text / iMessage):209210```211Good evening! Here's your day in review for Monday, Jan 27.212213🏃 Activity: 81 (Good) — 9,432 steps, 387 active cal, 2,145 total cal214📊 Readiness: 78 (Good) | Stress: normal range215😴 Last night's sleep: 82 (Good)216217Nice active day — you moved well. Wind down soon and aim for a solid bedtime to keep the momentum going.218219Dive deeper in the Oura app: https://cloud.ouraring.com/app/v1/home — sleep well!220```221222Example tone (WhatsApp / Telegram / Slack):223224```225Good evening! Here's your day in review for Monday, Jan 27.226227🏃 *Activity: 81 (Good)* — 9,432 steps, 387 active cal, 2,145 total cal228📊 *Readiness: 78 (Good)* | Stress: normal range229😴 *Last night's sleep: 82 (Good)*230231Nice active day — you moved well. Wind down soon and aim for a solid bedtime to keep the momentum going.232233Dive deeper in the Oura app: https://cloud.ouraring.com/app/v1/home — sleep well!234```235236## Ad-hoc Query Mapping237238Map natural language to endpoints:239240| User says | Fetch |241|-----------|-------|242| "How did I sleep?" / "Sleep report" | `daily_sleep` + `sleep` |243| "Am I ready to work out?" / "Readiness" | `daily_readiness` |244| "How active was I?" / "Steps today" | `daily_activity` |245| "Stress levels" | `daily_stress` |246| "Full health summary" | All endpoints |247| "Last week's sleep" / "trends" | `daily_sleep` with 7-day date range |248| "Compare this week to last" | Two date ranges, summarize differences |249250When the user asks about trends or comparisons, fetch the relevant date range and summarize the pattern (improving, declining, stable) with specific numbers.251252---253> Source: [rickybloomfield/OuraClaw](https://github.com/rickybloomfield/OuraClaw) — distributed by [TomeVault](https://tomevault.io).254<!-- tomevault:4.0:skill_md:2026-06-22 -->